0

Zend Lucene 検索ドキュメント

ルセン文書
    pk:キーワード
    category_id:キーワード
    title:未保存
    説明:未保存

これは私の文字列クエリ「java lucene AND +category_id:7」です。ここで結果:

配列
(
    [0] => 配列
        (
            [ピーク] => 209
            [カテゴリ ID] => 7
            [id] => 0
            [スコア] => 0.40750848701418
        )
   [1] => 配列
        (
            [ピーク] => 225
            [カテゴリ ID] => 7
            [id] => 3
            [スコア] => 0.30750848701619
        )

    [2] => 配列
        (
            [ピーク] => 211
            [category_id] => 8 ====>>> 間違い!!! 
            [ID] => 2
            [スコア] => 0.37152213415004
        )

)

category_id = 7 のみでクエリ検索を実行できますか?? 前もって感謝します。

4

2 に答える 2

2

Zend Query Parsing を使用してこの問題を解決しました

$strQuery = Zend_Search_Lucene_Search_QueryParser::parse('java lucene');

$cateTerm  = new Zend_Search_Lucene_Index_Term(7 , 'category_id');
$cateQuery = new Zend_Search_Lucene_Search_Query_Term($cateTerm);

$query = new Zend_Search_Lucene_Search_Query_Boolean();
$query->addSubquery($strQuery, true /* required */);
$query->addSubquery($cateQuery, true /* required */);

結果はcategory_id = 7のみになります:)

于 2011-10-28T03:02:55.530 に答える
0

クエリから を削除できます。ランク付けされた値としては必要ないため、必要なAND +category_id:7のはフィルターです。+category_id:7

実装方法はわかりませんZend_Luceneが、solrではfqパラメーターを渡していましたが、これはヒントになるかもしれません:)

フィルタリングは、検索スペースを制限し、ドキュメントのサブセットのみを検索ヒットと見なすことを許可するプロセスです。この機能を使用して、検索内検索結果を実装できます。Lucene には、BooleanFilter、CachingWrapperFilter、ChainedFilter、DuplicateFilter、PrefixFilter、QueryWrapperFilter、RangeFilter、RemoteCachingWrapperFilter、SpanFilter などのさまざまな組み込みフィルターが付属しています。(ネイティブJava バージョン) フィルターを IndexSearcher の検索メソッドに渡して、一致するドキュメントをフィルター処理できます。フィルター条件。

于 2011-10-27T11:46:52.457 に答える