我希望能够执行以下类型的查询:
要索引的数据包括(比方说)音乐视频,其中只有标题很有趣.我只是想对它们进行索引,然后为它们创建查询,这样,无论用户在查询中使用什么单词或单词,将首先返回包含这些单词的文档,按顺序,在tile的开头,然后返回(在没有特定的顺序)包含至少一个标题任何位置的搜索词的文档.所有这些都应该不区分大小写.
例:
对于文件:
如果我搜索"海",我想得到
首先是标题中包含"sea"的所有其他文档,但不是在开头.
如果我搜索"狂野的海洋",我想得到
首先是所有其他文件中标题为"Wild"或"Sea"但没有"Wild Sea"作为标题前缀的文档.
如果我搜索"Seasi",我不想得到任何东西(我不关心关键字标记和前缀查询).
现在AFAIKS,没有实际的方法告诉Lucene"找到word1和word2等位于1和2和3等位置的文件"
有模拟该行为的"变通方法":
将该字段索引两次.在field1你有单词标记(或许使用StandardAnalyzer),并在field2你有他们所有丛生成一个元素(使用KeywordAnalyzer).然后,如果您搜索类似于:
+(field1:word1 word2 word3)(field2:"word1 word2 word3*")
有效地告诉Lucene"文件必须包含标题中的word1或word2或word3,而且那些匹配"标题以> word1 word2 word3 <"开头的那些更好(获得更高的分数).
Video2Title = Wild sea索引为" title:lucene_start_token Wild sea",依此类推然后进行查询,以便:
+(标题:海)(标题:"lucene_start_token sea")
让Lucene返回标题中包含我的搜索词的所有文档,并对匹配"lucene_start_token +搜索词"的人给出更好的分数
那么我的问题是,确实有更好的方法(可能使用PhraseQuery和Term 职位)吗?如果没有,上述哪一个更好的性能?
您可以使用Lucene Payloads.您可以为字段值的每个项提供自定义提升.
因此,当您为标题编制索引时,您可以开始使用3的提升因子(例如):
标题:野生 | 3.0 生物 | 2.5 蓝 | 2.0 海 | 1.5
标题:海 | 3.0 生物 | 2.5
通过这种方式索引,您可以将最近的术语提升到标题的开头.
使用这种方法的主要问题是你必须自己标记并"手动"添加所有这些提升信息,因为分析器需要以这种方式构造的文本(term1 | 1.1 term2 | 3.0 term3).
| 归档时间: |
|
| 查看次数: |
4086 次 |
| 最近记录: |