lucene中的复杂搜索查询(查询使用简单分析器索引为数字,分析或未分析的字段)

时间:2010-08-31 19:28:09

标签: search indexing lucene

您好我正在使用lucene构建搜索应用程序。我的一些查询很复杂。例如,我的文档包含字段位置和填充,其中location是未分析字段,population是数字字段。现在我需要返回所有位置为“san-francisco”且人口介于10000和20000之间的文档。如果我将这两个字段合并并构建如下查询:

位置:旧金山和人口:[10000到20000],我没有得到正确的结果。关于为什么会发生这种情况以及我能做些什么的任何建议。

同样在构建复杂查询时,我会分析包含的某些字段,而不分析其他字段。例如,位置字段未分析,并包含芝加哥,旧金山等术语。虽然分析了摘要字段,但它通常包含描述性段落。

考虑这个问题:

地点:旧金山和摘要:“很棒的餐馆”

现在,如果我在搜索时使用StandardAnalyzer,当位置字段包含像san-francisco或los-angeles这样的术语时(即它无法处理中间的连字符)但是如果我使用关键字分析器时,我得不到正确的结果对于查询,我没有得到正确的结果,因为它无法在摘要字段中搜索短语“great restaurants”。

2 个答案:

答案 0 :(得分:1)

首先,我建议一次解决这个问题。从我对你的帖子的阅读,听起来你有多个问题:

  1. 您不确定特定查询的原因 没有返回任何结果。

  2. 您不确定为什么某些字段未被分析。

  3. 您遇到内置分析仪时遇到问题 连字符。

  4. 这就是你的帖子的阅读方式。如果这是正确的,我建议你分别发布每个问题。如果问题是准确的,你会得到更好的答案。试图用当前格式回答你的问题是压倒性的。

    现在,让我在你的一些问题中暗杀:

    对于您的第一个问题,如果您在Lucene中遇到非常复杂的查询,请问自己在这里进行这些查询是否有意义,而不是在适当的数据库中。对于更通用的答案,我会尝试通过删除部分查询来隔离问题,直到找到结果为止。一旦你发现查询的哪个部分没有导致结果,我们就可以进一步调试。

    对于第二个问题,请检查您要添加到Lucene的文档。 Lucene提供了存储数据的选项,但没有为其编制索引。确保在向文档添加字段时指定了正确的选项。

    对于第三个问题,如果内置分析仪不适合你,打破连字符,只需构建自己的分析仪。我遇到了与'@'符号类似的问题,为解决问题,我wrote a custom analyzer正确处理了它。你也可以为连字符做同样的事。

答案 1 :(得分:0)

您应该使用PerFieldAnalyzerWrapper。顾名思义,您可以针对不同的领域使用不​​同的分析仪。在这种情况下,您可以将KeywordAnalyzer用于城市名称,将StandardAnalyzer用于文本。