1

我正在尝试更改 MultiFieldQueryParser 的默认运算符:

fields = [...]
query = "hello stackoverflow"
clauses = [BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD, ...]

parser = MultiFieldQueryParser(Version.LUCENE_CURRENT, fields, analyzer)
parser.setDefaultOperator(QueryParserBase.AND_OPERATOR)
query = parser.parse(Version.LUCENE_CURRENT, query, fields, clauses, analyzer)

结果查询是:

(FieldA:hello FieldA:stackoverflow) (FieldB:hello FieldB:stackoverflow)

如何获取 AND 查询以仅检索在一个或多个可用字段(fieldA、fieldB)中包含两个单词(hello AND stackoverflow)的文档?

谢谢!- PyLucene 4.8.0,Python 2.7 64 位

4

2 回答 2

1

那些MultiFieldQueryParser.parse接受一堆参数的方法都是静态的。查询解析器实例以及您对它所做的任何事情都可能根本不存在,您所拥有的相当于:

query = MultiFieldQueryParser.parse(Version.LUCENE_CURRENT, query, fields, clauses, analyzer)

在使用查询解析器的实例时,parse您想要的是只需要一个 string的实例。

fields = ["FieldA", "FieldB"]
query = "hello stackoverflow"

parser = MultiFieldQueryParser(Version.LUCENE_CURRENT, fields, analyzer)
parser.setDefaultOperator(QueryParserBase.AND_OPERATOR)
query = parser.parse(query)
于 2014-11-10T22:13:04.230 回答
0
searcher = IndexSearcher(reader)
analyzer = WhitespaceAnalyzer(Version.LATEST)
fields = ('a', 'b', 'c')
parser = MultiFieldQueryParser(fields, analyzer)
query = parser.parser(query)
results = searcher.search(query,10)
于 2015-03-09T02:23:30.490 回答