sphinx search 2.3.2 版本一些新的特性 built-in suggests(内置搜索建议)

栏目: 编程工具 · 发布时间: 7年前

内容简介:在Sphinx 2.3.2中,我们介绍了几个新功能,其中一个是修正建议。直到现在,对于suggests,需要遵循从索引字典中提取所有单词的过程,从单词创建三叉树,并将其插入到一个索引中,该索引将被查询以获得建议。这是一个痛苦的过程,因为它正在假设一些工作来创建建议索引和定期更新它,并在应用程序代码中进行后处理工作(比如应用在Levenshtein距离)。#

在Sphinx 2.3.2中,我们介绍了几个新功能,其中一个是修正建议。

直到现在,对于suggests,需要遵循从索引字典中提取所有单词的过程,从单词创建三叉树,并将其插入到一个索引中,该索引将被查询以获得建议。这是一个痛苦的过程,因为它正在假设一些工作来创建建议索引和定期更新它,并在应用程序代码中进行后处理工作(比如应用在Levenshtein距离)。

# 注  Levenshtein 距离,又称 编辑距离 ,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

现在不用了!在2.3.2中任何索引启用了中缀,它都可以执行一个查询,将给你一个类似的单词的列表。由于magic 在查询时间完成,因此不需要重新索引来使用新功能。

新功能在2个语句中实现: CALL QSUGGESTCALL SUGGEST。

CALL QSUGGEST/SUGGEST

查询需要2个参数,首先是我们要搜索的字,第二个是我们执行它的本地索引。

两个调用之间的差异在第一个参数,它可以接受一个单词或一串词。在单个字的情况下,在2个calls之间没有差别。

如果第一个参数是一串词:

CALL SUGGEST– 只处理第一个字,忽略其余的

CALL QSUGGEST– 只处理最后一个字,忽略其余部分

* QSUGGEST可能会在将来收到一个更新,以便能够处理输入的所有单词,而不仅仅是最后一个。

除了前2个参数之外,可以设置许多参数来调整建议或输出。

看下面的例子:

MySQL [(none)]> CALL QSUGGEST('automaticlly ','forum');
+---------------+----------+------+
| suggest       | distance | docs |
+---------------+----------+------+
| automatically | 1        | 282  |
| automaticly   | 1        | 6    |
| automaticaly  | 1        | 3    |
| automagically | 2        | 14   |
| automtically  | 2        | 1    |
+---------------+----------+------+
5 rows in set (0.00 sec)

查询返回一个结果,每行有3列:suggest,distance和docs。

距离列是在字典中找到的输入词和词之间的Levenshtein距离(因此不需要像以前那样进行后处理)。

docs列表示找到该单词的文档数。

词语按距离升序排序。 具有相同距离的词按文档数量降序排序。 最好的选择应该是结果的第一个单词。

你必须记住,该函数使用索引字典中找到的词。 如果存在拼写错误的单词,结果可能不是预期的结果。

让我们举两个例子。 第一个有输入字正确,但请记住,这是下一个最好的选择有更多的文档。 遵循正常路径,我们仍然选择第一个词’苹果’ – 因为它是预期的结果。

MySQL [(none)]> CALL QSUGGEST('apple','forum');
+---------+----------+------+
| suggest | distance | docs |
+---------+----------+------+
| apple   | 0        | 65   |
| apply   | 1        | 343  |
| apples  | 1        | 8    |
| ample   | 1        | 5    |
| appli   | 1        | 2    |
+---------+----------+------+
5 rows in set (0.00 sec)

MySQL [(none)]>

In the second case, our input word is bad, however it has several occurrences in the index, so it appears in the first row.

在第二种情况下,我们的输入字是错误的(comand,其实应该是command),但它在索引中有多次出现,因此它出现在第一行。

MySQL [(none)]> CALL QSUGGEST('comand','forum');
+----------+----------+------+
| suggest  | distance | docs |
+----------+----------+------+
| comand   | 0        | 3    |
| command  | 1        | 1248 |
| coomand  | 1        | 1    |
| coming   | 2        | 263  |
| commands | 2        | 225  |
+----------+----------+------+
5 rows in set (0.00 sec)

遵循正常路径,我们应该选择第一个字,输入字,这当然是坏的。 发动机不能在两种情况之间产生差异,因为他们似乎对他都是正确的。 如果我们想要处理这种情况,我们应该向用户返回下一个具有下一个最短距离和最大文档的词 – 在这种情况下,它是正确的单词’command’。

以下是可选参数

limit– 返回前N个匹配项,默认值为5。

max_matches- 与查询max_matches类似,它定义要保留的匹配字数。 默认值为25.增加max_matches可以增加查询时间。

result_stats- 它允许禁用显示距离和文档统计。 默认情况下启用。

result_line- 如果设置,它将打印所有建议,距离和文档在一行中。

MySQL [(none)]> CALL QSUGGEST('apple','forum',1 as result_line);
+----------+-------------------------------+
| name     | value                         |
+----------+-------------------------------+
| suggests | apple,apply,apples,ample,appl |
| distance | 0,1,1,1,1                     |
| docs     | 75,385,10,5,3                 |
+----------+-------------------------------+
3 rows in set (0.00 sec)

max_edits–定义了原始词和建议词之间的最大Levenshtein距离的限制。 默认值为4。

MySQL [(none)]>  call suggest('segmentaton','forum', 10 as limit,4 as max_edits);
+---------------+----------+------+
| suggest       | distance | docs |
+---------------+----------+------+
| segmentation  | 1        | 95   |
| segmenation   | 2        | 1    |
| segementation | 2        | 1    |
| segmental     | 3        | 1    |
| fragmentation | 4        | 24   |
| segmented     | 4        | 10   |
| segmenting    | 4        | 6    |
| segmenter     | 4        | 3    |
| doumentation  | 4        | 1    |
| segregation   | 4        | 1    |
+---------------+----------+------+
10 rows in set (0.01 sec)

MySQL [(none)]>call suggest('segmentaton','forum', 10 as limit,3 as max_edits);
+---------------+----------+------+
| suggest       | distance | docs |
+---------------+----------+------+
| segmentation  | 1        | 95   |
| segmenation   | 2        | 1    |
| segementation | 2        | 1    |
| segmental     | 3        | 1    |
+---------------+----------+------+
4 rows in set (0.01 sec)

delta_len –定义原始单词和建议单词之间的最大字符距离。 默认值为3。

MySQL [(none)]> call suggest('segmentaton','forum', 10 as limit,2 as delta_len);
+--------------+----------+------+
| suggest      | distance | docs |
+--------------+----------+------+
| segmentation | 1        | 95   |
| segmenation  | 2        | 1    |
| segmenting   | 4        | 6    |
| doumentation | 4        | 1    |
| segregation  | 4        | 1    |
+--------------+----------+------+
5 rows in set (0.01 sec)

####这个对中文搜索貌似没有什么卵用!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Data Structures and Algorithms

Data Structures and Algorithms

Alfred V. Aho、Jeffrey D. Ullman、John E. Hopcroft / Addison Wesley / 1983-1-11 / USD 74.20

The authors' treatment of data structures in Data Structures and Algorithms is unified by an informal notion of "abstract data types," allowing readers to compare different implementations of the same......一起来看看 《Data Structures and Algorithms》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具