使用Lucene的新FreeTextSuggester查找长尾建议

Lucene的“ 建议”模块提供了许多有趣的自动建议实现,以便在用户将每个字符输入搜索框时为他们提供实时搜索建议。

例如, WFSTCompletionLookup将所有建议及其权重编译到一个紧凑的有限状态传感器中 ,从而可以对基本建议进行快速前缀查找。

AnalyzingSuggester使用Analyzer对建议和用户查询进行规范化, Analyzer对此进行了改进,以使Analyzer确定的空白,大小写,停用词,同义词等琐碎差别不会阻止建议匹配。

最后, AnalyzingInfixSuggester允许相匹配,以便每个建议(不只是前缀)内部的话可以触发匹配更进一步。 您可以在我最近创建的Lucene / Solr Jira搜索应用程序 (例如尝试使用“ python”)中看到该动作, 该动作可以吃我们自己的狗粮 。 这也是迄今为止唯一支持突出显示的建议程序实现( 事实证明 ,这对其他建议程序具有挑战性 )。

但是,所有这些建议者的共同限制是,他们只能从有限的一组先前构建的建议中提出建议。 如果您的建议是过去的用户查询,并且您有很多建议(例如,您是Google),那么这可能不是问题。 或者,如果天生就封闭了建议的范围(例如Netflix搜索将建议的电影和电视节目名称或电子商务网站上的所有产品名称),则建议使用一组封闭的建议。

N-Gram语言模型

对于其他所有人,其中大部分传入查询都落入了前所未有的长尾巴中 ,Lucene的最新建议者FreeTextSuggester可以为您提供帮助! 它使用此Google博客文章中描述的方法。

与其精确匹配先前的建议,不如从所有建议中构建一个简单的统计n-gram语言模型 ,并查看最后的标记(加上用户键入的任何最终标记的前缀,如果存在),以预测最可能的下一个标记令牌。

例如,到目前为止,用户的查询可能是:“ flashforge 3d p”,并且由于flashforge是3D打印机的罕见品牌,因此从未向建议者添加此特定建议前缀。 但是,“ 3d打印机”在其他情况下(不同品牌)是一个经常出现的短语。 在这种情况下,即使从未明确添加“ flashforge 3d打印机”作为建议, FreeTextSuggester仍将为下一个标记看到“ 3d”和“ p”前缀并预测打印机。

创建建议者时,您可以指定模型的顺序(N):N的值越大,需要更多的数据来进行正确训练,但可以做出更准确的预测。 还构建了所有低阶模型,因此,如果指定N = 3,则将得到三字母组,二元组和单字母组,它们都被编译为单个加权FST,以最大程度地共享文本令牌。 当然,更大的N将创建更大的FST。 在实践中,N = 3是您应该追求的最高水平,除非您同时拥有大量的建议来训练和RAM以保持最终的FST。

为了处理稀疏数据,在给定上下文(前N-1个单词)的出现频率不足以做出准确的预测的情况下,建议者使用愚蠢的退避语言模型 (是的,这确实是它的名字,是的,它的表现很好!)。

我希望使用此新的FreeTextSuggester的最佳方法将是回退:您将首先使用现有的完全匹配建议者之一,但是当这些建议者找不到给定查询的任何建议时,因为它“不寻常”且已交叉从长尾巴上FreeTextSuggester ,然后又回到FreeTextSuggester

谷歌似乎用这样的模式方法的建议,以及:如果键入“flashforge 3D P”你应该看到这样的事情,其中每个建议涵盖整个查询到目前为止(事实上,谷歌已经听到了flashforge品牌的3D打印机!):

建议1

但是,如果您继续输入并输入“ flashforge 3d打印机电源u”,则建议会发生变化:Google不会建议一个完整的查询,而是匹配我键入的所有内容,而是建议最后一两个字:

建议2

和往常一样,此功能是非常新的功能,可能包含令人兴奋的错误! 有关详细信息, 请参见Jira问题LUCENE-5214 。 如果您使用这个新的建议者,请在Lucene的用户列表上开始讨论!

参考: 使用我们的JCG合作伙伴 Michael Mc Candless在Lucy Bits博客上使用Lucene的新FreeTextSuggester查找长尾建议 。

翻译自: https://www.javacodegeeks.com/2014/01/finding-long-tail-suggestions-using-lucenes-new-freetextsuggester.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java属性中指定Json的属性名称(序列化和反序列化)

序列化对象,只需要使用注解"JsonProperty(value "pwd")" import com.fasterxml.jackson.annotation.JsonProperty;public class User{JsonProperty(value "pwd")private String password; } 比如上面例子,在作为请求接…

网站表单输入框去除浏览器默认样式

网页不可避免的使用到表单,提交一些内容到后端,进行前后端交互。可是由于浏览器总是有各自的默认样式,所以需要对其进行清除。总的来说有以下几种: 1、input输入框获取焦点的时候,默认带蓝色边框,如果设计要…

mysql 查看锁表日志_MYSQL 表锁情况查看

查看锁表情况mysql> show status like ‘Table%’;—————————-——–| Variable_name | Value |—————————-——–| Table_locks_immediate | 795505 || Table_locks_waited | 0 || Table_open_cache_hits | 0 || Table_open_cache_misses | 0 || Table_ope…

js-原始类型和声明变量

** Java的基本数据类型:byte、short、int、long、float、double、char、boolean ** 定义变量 都是用关键字 var(ES6中可以使用const和let来定义变量,后面会有ES6的语法介绍) ** js的原始类型(5个) - string:字符串  …

Java,Scala,Guava和Trove集合-它们可以容纳多少数据?

关于我们的数据结构,令人着迷的事情之一是,即使我们对它们非常熟悉,我们仍然很难说出像HashMap这样基本的东西在1GB的内存中可以容纳多少个项目。 我们可能会在学校,高级开发人员那里学到这一点,或者由于数据结构选择不…

spoj1026 favorite dice

1 #include <bits/stdc.h>2 using namespace std;3 int n,t;4 const int N 1200;5 double dp[N];6 /*7 甩一个n面的骰子&#xff0c;问每一面都被甩到的需要甩的次数期望是多少。8 dp[i]&#xff1a;已经甩到i个面了&#xff0c;要达到n个面还需要次数的期望9 显然dp[…

switch 失效

switch 开关失效无法切换&#xff0c;可以关闭&#xff0c;无法开启。 发现问题点 require-table.js 中toggle value的数据类型不是 number 导致 &#xff08;value ? no : yes )判断总为no&#xff1b; 前面将value 强制转换为number类型即可 转载于:https://www.cnblogs.c…

纯php socket mysql_PHP 连接 unix_socket MySQL

当MySQL使用Unix Socket启动时&#xff0c;直接使用localhost会发生了一个数据库错误&#xff0c;发生无法连接数据库错误。 Warning: mysql_connect() [function.mysql-connect]: [2002] 这时应当修改hostname&#xff0c;例如在CI 配置数据库 (database.php) 从&#xff1a; …

html-其他常见标签的使用

b&#xff1a;加粗 s&#xff1a;删除线 u&#xff1a;下划线 i&#xff1a;斜体 per&#xff1a;原样输出 sup:上标 sub:下标 p&#xff1a;段落标签 比br多一行 &#xff08;CSS&#xff09; div&#xff1a;自动换行 span&#xff1a;在一行显示 完整代码&#xff1a; <h…

在OpenShift上将JMS与JBoss A-MQ结合使用。 从远程客户端和加密中学到的经验教训。...

OpenShift是“红帽开发的开放式混合云应用程序平台”。 它具有不同的风格&#xff0c;对于大多数您想做的事情&#xff0c;最有趣的部分是公共云应用程序开发和托管平台“ OpenShift Online ”。 您可以轻松地尝试一下&#xff0c;因为在云中使用OpenShift Online是免费的&…

[Swift]LeetCode281. 之字形迭代器 $ Zigzag Iterator

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…

SpringBoot整合系列-PageHelper分页插件

原创作品&#xff0c;可以转载&#xff0c;但是请标注出处地址&#xff1a;https://www.cnblogs.com/V1haoge/p/9971043.html SpringBoot整合MyBatis分页插件PageHelper 步骤 第一步&#xff1a;首先整合MyBatis 参照之前SpringBoot整合系列-整合MyBatis 第二步&#xff1a;添加…

mysql为什么不能插入数据_mysql为啥不能插入数据

mysql为何不能插入数据&#xff1f;安装AppServ后首次使用mysql&#xff0c;没有图形界面&#xff0c;在“MySql Command Line Client”的操作如下&#xff1a;mysql> create database cars;Query OK, 1 row affected (0.00 sec)mysql> use cars;Database changedmysql&g…

scss-@extend

extend指令用于共享规则和选择器之间的关系。它可以扩展所有其他类的样式在一个类中&#xff0c;也可应用于自己特定的样式。 查看如下scssextend示例&#xff1a; .style{font-size: 30px;font-style: italic; }h2{color: #787878;extend .style} .container{extend h2 } 编译…

JavaSE 7,8:确定特定文件系统支持的视图

如果您对文件或目录有疑问&#xff0c;例如是否隐藏文件&#xff0c;是否为目录&#xff0c;文件的大小以及文件的所有者&#xff0c;则可以从元数据中获得这些问题&#xff08;以及许多其他问题&#xff09;的答案&#xff0c;这是关于其他数据的数据。 NIO.2将元数据的概念与…

mocha 测试 mysql_e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDrive

e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step 二 图片验证码的识别 &#xff0c; 下面讲一下Node.js中如何访问数据库&#xff0c; 在做自动化测试过程中&#xff0c; 经常可能遇到需要到数据库取值&#xff0c;或是…

13.看板方法——使用两层系统扩展看板笔记

00.看板方法的第一条原则是&#xff1a;对在制品设置限额&#xff0c;并通过使用一个可视化的信号系统来拉动工作。 01.大型项目也需要大家对优先级排序节奏达成共识&#xff0c;及时对输入队列进行填充。一般的规则是&#xff0c;会议越频繁今儿节奏越紧凑越好。 02.规模更小、…

在Window上使用Jenkins自动发布Java工件

这篇文章将展示如何使用Jenkins Continuous Integration自动执行Java Web应用程序&#xff08;使用MYSQL DB和基于Hibernate ORM在基于REST的Jersey2 Spring环境中开发的学生申请应用程序&#xff09;的发布过程-上载发布工件到发布存储库。 如上一篇文章在Windows上使用Jenkin…

scss-@for 指令

此指令用于循环输出&#xff0c;具有两种循环方式&#xff0c;下面分别做一下介绍。 &#xff08;1&#xff09;.for $var from <start> through <end>: 此种方式的遍历索引区间是[start,end]&#xff0c;scss代码实例如下: for $i from 1 through 3 {.item-#{$i} …

Python开发【第六篇】:模块

Python开发【第六篇】&#xff1a;模块 模块&#xff0c;用一砣代码实现了某个功能的代码集合。 类似于函数式编程和面向过程编程&#xff0c;函数式编程则完成一个功能&#xff0c;其他代码用来调用即可&#xff0c;提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来…