我正在尝试生成类似于 Lucene 中的 QueryParser 所做的事情,但没有解析器,即通过 StandardAnalyzer 运行字符串,对其进行标记并在 BooleanQuery 中使用 TermQuery:s 来生成查询。我的问题是我只从 StandardAnalyzer 获得 Token:s,而不是 Term:s。我可以通过使用 Token.term() 从中提取字符串来将 Token 转换为术语,但这只是 2.4.x 并且它似乎倒退了,因为我需要再次添加该字段。使用 StandardAnalyzer 生成 TermQuery 的正确方法是什么?
我正在使用pylucene,但我想Java等的答案是一样的。这是我想出的代码:
from lucene import *
def term_match(self, phrase):
query = BooleanQuery()
sa = StandardAnalyzer()
for token in sa.tokenStream("contents", StringReader(phrase)):
term_query = TermQuery(Term("contents", token.term())
query.add(term_query), BooleanClause.Occur.SHOULD)