首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NGram顺序搜索

NGram顺序搜索
EN

Stack Overflow用户
提问于 2012-09-03 21:54:53
回答 1查看 448关注 0票数 1

几个月前,我问了一个类似的问题here。然而,我不能让它正常工作:

我尝试构建一个简单的文件名搜索。我希望用户可以搜索文件名的任何部分。

假设对以下文件名进行了索引:

代码语言:javascript
复制
[1] My_file_2012.01.12.txt
[2] My_file_2012.01.05.txt
[3] My_file_2012.05.01.txt
[4] My_file_2012.08.27.txt
[5] My_file_2012.12.12.txt
[6] My_file_2011.12.12.txt
[7] file_01_2012.09.09.txt

然后,用户可以搜索:

代码语言:javascript
复制
"ile_20"                    (finds the first six documents)
"12.txt"                    (finds 1, 5, 6)
"12" followed by "01"       (finds 1, 2, 3 - NOT 7)
"2012" followed by "01"     (finds 1, 2, 3 - NOT 7)

(注意:是的,用户可能真的会搜索像"ile_20“这样的字符串...例如,由于复制和粘贴错误)

因此,我使用nGram-tokenizer来索引文件名的每个部分。到目前为止,它工作得很好。为了支持上面提到的“后跟”-search,我需要一个尊重术语顺序的查询,无论这两个术语之间有多少文本(好的,假设最大。100个字符)。

由于带有"slop“的"text_phrase"-query不能正确考虑术语的顺序,因此我决定使用"span_near”查询。这在大多数情况下都工作得很好。

请看这里我的完整示例-索引包含。错误-描述:click

如上面的示例中所提到的,由于nGram记号生成器为每个记号生成位置值,因此查询"'2012‘后跟'01'“不起作用,但是当"span_near”查询使用这些值时,这些值并不是很有用。在索引时,将术语"2012“分配给位置值(50),该位置值大于术语"01”的位置值(例如10)。由于50和10的顺序不一致,因此查询将没有结果。只有具有相同长度的术语(例如,"'12‘后跟'01'")或术语按长度排序(例如,"'20’后跟'.12'"),按序排序才有效。

那么我如何才能实现正确的搜索行为呢?我只希望能够搜索文件名的任何部分,同时尊重术语的顺序。

也许有一种方法可以告诉"span_near“不要使用这个位置,而是使用"start_offset"?或者,我可以使用其他查询吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-06 09:08:09

像这样的通配符搜索如何:

"12“后跟"01”-> 12*01

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12249258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档