1

Zend Search Lucene を使用しています。ユーザーが検索ボックスに Vibrant Bouquet と入力すると、「Vibrant」または「bouquet」という単語 (または両方) を含む結果が返されます。私が望むのは、これらの結果を両方の単語で返すことだけです。

明らかに、単語の間に AND を入力することでこれを行うことができますが、私が知る限り、Lucene は暗黙的に各単語の間に OR をそのまま挿入します。これを変更して、各単語の間に AND を暗黙的に配置して、検索のデフォルトの動作が 1 つ以上の単語だけでなくすべての単語を検索するようにすることは可能ですか?

検索用語の文字列を置換してスペースを AND に置き換えることでこれを行うことができますが、より複雑なクエリでユーザーが入力するのを止めるという問題が発生する可能性があります。

4

2 に答える 2

3

私はあなたのためにグーグルを検索しました:

Zend_Search_Lucene_Search_QueryParser::setDefaultOperator($operator)デフォルトのブール演算子は、 メソッドとZend_Search_Lucene_Search_QueryParser::getDefaultOperator()メソッドでそれぞれ設定または取得できます。

これらのメソッドは、Zend_Search_Lucene_Search_QueryParser::B_ANDおよびZend_Search_Lucene_Search_QueryParser::B_OR定数で動作します。

http://framework.zend.com/manual/en/zend.search.lucene.query-language.html

于 2010-08-12T14:07:00.687 に答える
1

私はこのコードを試しましたが、これは機能しません:

Zend_Search_Lucene_Search_QueryParser::setDefaultOperator('AND');

しかし、このコードは機能します:

Zend_Search_Lucene_Search_QueryParser::setDefaultOperator(Zend_Search_Lucene_Search_QueryParser::B_AND);

柔軟性を高めるために:

$term='zand search';

Zend_Search_Lucene_Search_QueryParser::setDefaultOperator(Zend_Search_Lucene_Search_QueryParser::B_AND);

$query = Zend_Search_Lucene_Search_QueryParser::parse($term."*",'UTF-8');


$results = $index->find($query );

結果の例:

(ある世界)zendsearch(ある世界)

zend search lucence

柔軟性を高めるには、クエリ言語を使用します。

クエリ言語

于 2012-11-11T12:20:24.370 に答える