私のインデックスに「ages」というフィールドを持つドキュメントが含まれているとします。「年齢」フィールドの入力例:
- 25
- 24、28
- 25、31
フィールドに 20 歳から 30 歳までの年齢が含まれるすべてのドキュメントを取得するには、どのようにクエリを実行すればよいでしょうか? Zend Lucene を使用しています。
私のインデックスに「ages」というフィールドを持つドキュメントが含まれているとします。「年齢」フィールドの入力例:
フィールドに 20 歳から 30 歳までの年齢が含まれるすべてのドキュメントを取得するには、どのようにクエリを実行すればよいでしょうか? Zend Lucene を使用しています。
lmgtfy :-
$from = new Zend_Search_Lucene_Index_Term(20, 'ages');
$to = new Zend_Search_Lucene_Index_Term(30, 'ages');
$query = new Zend_Search_Lucene_Search_Query_Range(
$from, $to, true // inclusive
);
$hits = $index->find($query);
lucene と solr はどちらも多値をサポートしています。
あなたの場合、データをうまく正規化していません。
年齢フィールドを複数値として再割り当てし
ます。範囲クエリは、複数値の値の 1 つと一致します。
それは意地悪だ
20,29 <-- matched
20,31 <-- matched
30,31 <-- does not matched
20 ~ 30 のすべての値を一致させる必要がある場合は、
20,21,30 <-- matched
19,21,30 <-- not matched
次のような別のフィールドを使用できます
:-
age_20_30 : store 1 (when all ages are between 20 to 30), else 0
age_30_40 : store 1 (when all ages are between 30 to 40), else 0
... etc
その後、 で検索するように変更できますage_20_30:1
。
これは、lucene に集計結果を操作するように指示するようなものです。