luceneのQueryParserと同様の機能を作成しようとしていますが、パーサーを使用せずに、つまりStandardAnalyzerで文字列を実行し、これをトークン化し、BooleanQueryでTermQuery:sを使用してクエリを作成しています。私の問題は、Term:sではなくStandardAnalyzerからToken:sのみを取得することです。Token.term()を使用して文字列を抽出するだけで、トークンを用語に変換できますが、これは2.4.xのみであり、フィールドをもう一度追加する必要があるため、逆に見えます。StandardAnalyzerを使用してTermQueryを生成する適切な方法は何ですか?
私はピルセンを使用していますが、答えは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)