将完整的动态lucene查询语法传递给QueryParser

将完整的动态lucene查询语法传递给QueryParser,lucene,Lucene,我只是想知道是否有办法将一个纯动态Lucene语法查询(包括用布尔运算符分隔的字段:值对)传递给QueryParser。查询将在运行时确定(可能使用自定义查询生成器)。由于QueryParser在实例化时需要一个字符串(默认字段名)和一个分析器,所以我不知道如何使用代码 如果您能帮上忙,我们将不胜感激。我有点困惑。这听起来像是你在问你是否可以使用QueryParser来完成它的设计目的 为了便于解释,分析器会在必要时在文本中查找术语,StandardAnalyzer是一个很好的起点。默认字段只是

我只是想知道是否有办法将一个纯动态Lucene语法查询(包括用布尔运算符分隔的字段:值对)传递给QueryParser。查询将在运行时确定(可能使用自定义查询生成器)。由于QueryParser在实例化时需要一个字符串(默认字段名)和一个分析器,所以我不知道如何使用代码


如果您能帮上忙,我们将不胜感激。

我有点困惑。这听起来像是你在问你是否可以使用QueryParser来完成它的设计目的

为了便于解释,分析器会在必要时在文本中查找术语,
StandardAnalyzer
是一个很好的起点。默认字段只是,当您没有为术语指定字段时,它使用此处传入的字段。没有指定字段的搜索词的情况将在中介绍

下面是QueryParser的一个相当典型的用法:

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_43);
QueryParser parser = new QueryParser(Version.LUCENE_43, "myText", analyzer);
Query myQuery = parser.parse("My well-formed query");

谢谢你的回复。确切地说,我正在寻找QueryParser的一个经典行为来解析传递给它的查询,而不必识别任何应该查询术语的字段。假设我希望解析器解析这个查询:“field1:value1和field2:value2或…”,这个查询可以包含任意数量的field:value对。在这种情况下,QueryParser应该如何实例化?我想查询动态字段数。使用MultiFieldQueryParser没有帮助,因为它需要特定的字段,并且在查询语法功能方面没有那么大的灵活性。您使用的分析器应该与使用它编制索引的分析器相同,但它实际上不会改变它处理解析查询语法的方式。您是否遇到了一些特殊的问题?我能否将解析器实例化为:newqueryparser(“field1”,analyzer);然后将查询字符串作为:“(field2=value1和field3=value3)或field4:(+value4+value5)”传递给上面的解析器,因为查询字符串不依赖于field1的默认值。好的,构造函数需要3.0以后的
版本,您需要使用
,而不是
=
,根据您在此处提供的其他查询,除此之外,是的。如果一个特定的查询没有使用默认字段,这不会导致任何问题。谢谢femto。这很有帮助