几个月前,我问了一个类似的问题here。然而,我不能让它正常工作:
我尝试构建一个简单的文件名搜索。我希望用户可以搜索文件名的任何部分。
假设对以下文件名进行了索引:
[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然后,用户可以搜索:
"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"?或者,我可以使用其他查询吗?
发布于 2012-09-06 09:08:09
像这样的通配符搜索如何:
"12“后跟"01”-> 12*01
https://stackoverflow.com/questions/12249258
复制相似问题