您好我正在使用lucene构建搜索应用程序。我的一些查询很复杂。例如,我的文档包含字段位置和填充,其中location是未分析字段,population是数字字段。现在我需要返回所有位置为“san-francisco”且人口介于10000和20000之间的文档。如果我将这两个字段合并并构建如下查询:
位置:旧金山和人口:[10000到20000],我没有得到正确的结果。关于为什么会发生这种情况以及我能做些什么的任何建议。
同样在构建复杂查询时,我会分析包含的某些字段,而不分析其他字段。例如,位置字段未分析,并包含芝加哥,旧金山等术语。虽然分析了摘要字段,但它通常包含描述性段落。
考虑这个问题:
地点:旧金山和摘要:“很棒的餐馆”
现在,如果我在搜索时使用StandardAnalyzer,当位置字段包含像san-francisco或los-angeles这样的术语时(即它无法处理中间的连字符)但是如果我使用关键字分析器时,我得不到正确的结果对于查询,我没有得到正确的结果,因为它无法在摘要字段中搜索短语“great restaurants”。
答案 0 :(得分:1)
首先,我建议一次解决这个问题。从我对你的帖子的阅读,听起来你有多个问题:
您不确定特定查询的原因 没有返回任何结果。
您不确定为什么某些字段未被分析。
您遇到内置分析仪时遇到问题 连字符。
这就是你的帖子的阅读方式。如果这是正确的,我建议你分别发布每个问题。如果问题是准确的,你会得到更好的答案。试图用当前格式回答你的问题是压倒性的。
现在,让我在你的一些问题中暗杀:
对于您的第一个问题,如果您在Lucene中遇到非常复杂的查询,请问自己在这里进行这些查询是否有意义,而不是在适当的数据库中。对于更通用的答案,我会尝试通过删除部分查询来隔离问题,直到找到结果为止。一旦你发现查询的哪个部分没有导致结果,我们就可以进一步调试。
对于第二个问题,请检查您要添加到Lucene的文档。 Lucene提供了存储数据的选项,但没有为其编制索引。确保在向文档添加字段时指定了正确的选项。
对于第三个问题,如果内置分析仪不适合你,打破连字符,只需构建自己的分析仪。我遇到了与'@'符号类似的问题,为解决问题,我wrote a custom analyzer正确处理了它。你也可以为连字符做同样的事。
答案 1 :(得分:0)
您应该使用PerFieldAnalyzerWrapper。顾名思义,您可以针对不同的领域使用不同的分析仪。在这种情况下,您可以将KeywordAnalyzer用于城市名称,将StandardAnalyzer用于文本。