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

Search lucene中的复杂搜索查询(使用简单分析器查询索引为数字、已分析或未分析的字段),search,indexing,lucene,Search,Indexing,Lucene,嗨,我正在使用lucene构建一个搜索应用程序。我的一些查询很复杂。例如,“我的文档”包含“位置”和“填充”字段,其中“位置”是未分析的字段,“填充”是数字字段。现在我需要返回所有位置为“旧金山”且人口在10000到20000之间的文档。如果我将这两个字段组合起来并构建如下查询: 地点:旧金山,人口:[10000到20000],我没有得到正确的结果。任何关于为什么会发生这种情况以及我能做什么的建议 此外,在构建复杂查询时,我所包含的一些字段会被分析,而其他字段则不会被分析。例如,“位置”字段未经

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

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

此外,在构建复杂查询时,我所包含的一些字段会被分析,而其他字段则不会被分析。例如,“位置”字段未经分析,包含芝加哥、旧金山等术语。分析摘要字段时,它通常包含一个描述性段落

考虑这个查询:

地点:旧金山和总结:“很棒的餐厅”


现在,如果我在搜索时使用StandardAnalyzer,当location字段包含诸如san francisco或los angeles之类的术语时,我不会得到正确的结果(即它不能处理中间的连字符),但是如果我使用关键字分析器进行查询,我也不会得到正确的结果,因为它无法搜索短语“great restaurants”在摘要字段中

首先,我建议一次解决一个问题。从我读到的你的文章来看,听起来你有很多问题:

  • 您不确定为什么会出现特定的查询 没有返回任何结果

  • 您不确定为什么没有分析某些字段

  • 您在处理内置分析器时遇到问题 连字符

  • 你的帖子就是这样读的。如果这是正确的,我建议你把每一个问题分别贴出来。如果问题准确,你会得到更好的答案。用目前的方式回答你的问题是非常困难的

    现在,让我来摸摸你的一些问题:

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

    对于第二个问题,请检查要添加到Lucene的文档。Lucene提供了存储数据而不是索引数据的选项。确保在向文档添加字段时指定了正确的选项


    对于第三个问题,如果内置分析器不适合您,请中断连字符,只需构建您自己的分析器。我遇到了一个关于@符号的类似问题,为了解决这个问题,我建议正确处理它。对于连字符也可以这样做。

    首先,我建议您一次解决一个问题。从我读到的你的文章来看,听起来你有很多问题:

  • 您不确定为什么会出现特定的查询 没有返回任何结果

  • 您不确定为什么没有分析某些字段

  • 您在处理内置分析器时遇到问题 连字符

  • 你的帖子就是这样读的。如果这是正确的,我建议你把每一个问题分别贴出来。如果问题准确,你会得到更好的答案。用目前的方式回答你的问题是非常困难的

    现在,让我来摸摸你的一些问题:

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

    对于第二个问题,请检查要添加到Lucene的文档。Lucene提供了存储数据而不是索引数据的选项。确保在向文档添加字段时指定了正确的选项


    对于第三个问题,如果内置分析器不适合您,请中断连字符,只需构建您自己的分析器。我遇到了一个关于@符号的类似问题,为了解决这个问题,我建议正确处理它。您可以对连字符执行相同的操作。

    您应该使用。顾名思义,您可以为不同的字段使用不同的分析器。在这种情况下,您可以将关键字分析器用于城市名称,将StandardAnalyzer用于文本。

    您应该使用。顾名思义,您可以为不同的字段使用不同的分析器。在这种情况下,您可以将关键字分析器用于城市名称,将标准分析器用于文本。

    +1用于PerfielDanalyzerRapper。您还应该看看布尔查询,它允许您组合较小的查询。它们更容易调试和理解。您还应该看看布尔查询,它允许您组合较小的查询。它们更容易调试和理解。