2016-08-24 7 views
1

を返す私は、Luceneクエリを生成するには、次のコードを使用しています:ZF2 Luceneクエリは何も返しません - ルークで同じクエリがZF2では、予想される結果

次のクエリを生成
$query = new Lucene\Search\Query\Boolean(); 

    $term = new Lucene\Index\Term($search->type, 'type'); 
    $subqueryTerm = new Lucene\Search\Query\Term($term); 
    $query->addSubquery($subqueryTerm, true); 

    $term = new Lucene\Index\Term('[+<= ' . $search->purchase_value . ']', 'min_price'); 
    $subqueryTerm = new Lucene\Search\Query\Term($term); 
    $query->addSubquery($subqueryTerm, true); // required 

    $term = new Lucene\Index\Term('[' . $search->purchase_value . ' >=]', 'max_price'); 
    $subqueryTerm = new Lucene\Search\Query\Term($term); 
    $query->addSubquery($subqueryTerm, true); // required 

+(type:Buying) +(min_price:[+<= 160.00]) +(max_price:[160.00 >=]) 

このクエリをZF2($hits = $index->find($query);)で実行すると空の配列が返されますが、Lukeを使用してインデックスに対してクエリを手動で実行すると、期待している結果が返されます。

Lukeと同じ結果を返すには、コードを変更する必要がありますか?

私は両方のシステムのデフォルトのアナライザを使用しています:

  • ルーク:org.apache.lucene.analysis.KeywordAnalyzer
  • ZF2:(私はだと思う)\ZendSearch\Lucene\Analysis\Analyzer\Common\Text

私は別のQueryParserを使用する必要がありますか?

+0

これは数値の長さに関係していると思うので、私は 'str_pad($ input、10、0、STR_PAD_LEFT)'を使っていますので、格納された値は '0000432.10'に似ています。また、同じ方法でクエリの書式を設定しています。再び、それはルークでは動作しますが、ZF2では動作しません。 –

答えて

1

「min_price」フィールドで「[+ < = 160.00]」という用語を検索しています。あなたはではなく、の範囲クエリを作成しています。私は、別のQueryParserを使用して、QueryParserをまったく使用していないことを意味しているわけではなく、APIを使用してクエリを構築しています。あなたは使用する必要がありますrange search

$term = new Lucene\Index\Term($search->purchase_value, 'min_price'); 
$subqueryRange = new Lucene\Search\Query\Range(null, $term, true); 
$query->addSubquery($subqueryRange, true); 

$term = new Lucene\Index\Term($search->purchase_value, 'max_price'); 
$subqueryRange = new Lucene\Search\Query\Range($term, null, true); 
$query->addSubquery($subqueryRange, true); 

私は道で、ここで仮定している、その「+ < =」より小さいか等しいため、クエリ構文であることを意味しています。私はその種の構文をサポートするluceneの何かに精通していません。示されているように、オープンエンドの範囲は、使用するのに正しいものになります。

関連する問題