名前と価格が設定されたmp3プレーヤーのセットがあると仮定します。
特定の名前で価格が100ドル未満のすべての商品を検索するための正しいSolrクエリを作成するにはどうすればよいですか?
q = "(name:(ipod) AND price ???? 100.0)"
<
クエリパーサーが演算子をサポートしているとは思いません。RangeQueryを明示的に定義する必要があります。次に、 BooleanQueryを使用して名前クエリをそれに添付できます。
更新:どうやら、私は間違っていました。実際、SolrのクエリパーサーはLuceneのクエリパーサーよりも賢いです。これがあなたの答えです:https ://lucene.apache.org/solr/guide/8_0/the-standard-query-parser.html#differences-between-lucene-s-classic-query-parser-and-solr-s -standard-query-parser
field:[* TO 100]は、100以下のすべてのフィールド値を検索します
また、パフォーマンス面では、これにフィルタークエリを使用する必要があることにも注意してください。
&q=name:ipod&fq=price:[* TO 100]
私の知る限り、Solr/Luceneがより大きい/より小さいをサポートしているとは思いません。整数や日付などのプログラムで実行できます(この場合、小数点以下2桁しかないため、金額の値を指定できます)。
たとえば、ネイティブでは、LuceneおよびSolrクエリパーサーは以下(<=)をサポートします。
?q=name:ipod AND price:[* to 99.99]
データに数分の1セントが含まれていない場合、これにより、探している100ドル未満が得られます。
日付や整数など、特に有限差分があるものの場合は、目的の値をデクリメント(またはより大きい場合はインクリメント)できます。
編集:Solrのバージョン6.5のドキュメントを確認してください。排他的な範囲のサポートが含まれています。リファレンスガイドの272ページで説明されています。
基本的に、中括弧を使用して未満を示します。
?q=name:ipod AND price:{* TO 100}