"a"と "b"という2つのフィールドでインデックスを検索したいと考えています。私は、Freud -- theories of psychology
のような検索を与えていると私は、次のクエリを実行したいと思います:ORを使用して2つのLuceneクエリを結合するにはどうすればよいですか?
(a="Freud" AND b="theories of psychology") OR (b="Freud" AND a="theories of psychology")
は、私はこれをどのように行うのですか?これまでのところ、私はLuceneのはMultiFieldQueryParser
を使用して2つの半分(firstHalf
とsecondHalf
)を構築する必要があり、その後、私は
BooleanQuery combined = new BooleanQuery();
combined.add(firstHalf, BooleanClause.Occur.SHOULD);
combined.add(secondHalf, BooleanClause.Occur.SHOULD);
しかしcombined
でそれらを組み合わせてきただけで、「理論」は「心理学」を発見しない場合の結果が返されることを可能にします私は両方の用語を間違いなく望んでいます。 Luceneは「心理学の理論」を3つの単語に分割し、それらを個別にORと組み合わせるようです。これをどうやって防ぐのですか?
firstHalf
は、次のようになります。analyzer
はちょうどStandardAnalyzer
オブジェクトです
Query firstHalf = MultiFieldQueryParser.parse(Version.LUCENE_33,
new String[]{"Freud", "theories of psychology"},
new String[]{"a", "b"},
new BooleanClause.Occur[]{BooleanClause.Occur.MUST, BooleanClause.Occur.MUST},
analyzer);
。
はただのLuceneは次のようにブール論理をサポートしていないと言われた、それはSHOULD = OR!。その場合、_Lucene in Action_ 2版は95ページで間違っています。:)今私は_why_私のクエリが壊れていることを知っている、ちょうどそれを修正する方法を知らない。 – dmn
クエリは正しいですか?クエリー「心理学の理論」とは、3つの単語のうちの少なくとも1つがどこかで出現しなければならないが、それらのどれもが必要な単語ではないことを意味する。 –
@ KaiChanいいえ、私はこの制限を入れるためにこれを修正しなければなりませんでした。 :) – dmn