几个月前,我问了一个类似的问题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来索引文件名的每个部分。这个 到目前为止工作正常。 为了支持上面提到的“后跟”搜索,我需要一个查询 尊重条款的顺序,无论它们之间有多少文本 两个术语(可以说最多100个字符)。
由于带有“slop”的“text_phrase”-query不符合排序 正确的条款,我决定使用“span_near”查询。这很好用 在大多数情况下。
在这里看到我的完整示例 - 索引包含。错误描述:click
如上例所示,查询“'2012'后跟'01'” 因为nGram tokenizer为每个生成一个位置值,所以不起作用 令牌,但这些值在“span_near”查询使用时不是很有用。而 索引,术语“2012”被分配给位置值(50),即 大于术语“01”的位置值(例如10)。自50和10 不按顺序查询将没有结果。有序的东西工作 只纠正具有相同长度的术语(例如“12”后跟 '01'“)或者如果条款按长度排序(例如”20“后跟 ” 0.12' “)。
那么我怎样才能实现正确的搜索行为?我只想要这种能力
在尊重文件的顺序的同时搜索文件名的任何部分
条款。
也许有办法告诉“span_near”不要使用这个位置
而是“start_offset”?
或者我可以使用另一个查询吗?
答案 0 :(得分:0)
如下所示的通配符搜索:
“12”后跟“01” - > 12 * 01