20

名前と価格が設定されたmp3プレーヤーのセットがあると仮定します。

特定の名前で価格が100ドル未満のすべての商品を検索するための正しいSolrクエリを作成するにはどうすればよいですか?

q = "(name:(ipod) AND price ???? 100.0)"

4

3 に答える 3

24

<クエリパーサーが演算子をサポートしているとは思いません。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以下のすべてのフィールド値を検索します

于 2011-12-30T11:35:24.380 に答える
14

また、パフォーマンス面では、これにフィルタークエリを使用する必要があることにも注意してください。

&q=name:ipod&fq=price:[* TO 100]
于 2012-01-01T22:05:59.867 に答える
8

私の知る限り、Solr/Luceneがより大きい/より小さいをサポートしているとは思いません。整数や日付などのプログラムで実行できます(この場合、小数点以下2桁しかないため、金額の値を指定できます)。

たとえば、ネイティブでは、LuceneおよびSolrクエリパーサーは以下(<=)をサポートします。

?q=name:ipod AND price:[* to 99.99]

データに数分の1セントが含まれていない場合、これにより、探している100ドル未満が得られます。

日付や整数など、特に有限差分があるものの場合は、目的の値をデクリメント(またはより大きい場合はインクリメント)できます。

編集:Solrのバージョン6.5のドキュメントを確認してください。排他的な範囲のサポートが含まれています。リファレンスガイドの272ページで説明されています。

http://mirror.cc.columbia.edu/pub/software/apache/lucene/solr/ref-guide/apache-solr-ref-guide-6.5.pdf

基本的に、中括弧を使用して未満を示します。

?q=name:ipod AND price:{* TO 100}
于 2017-04-27T13:27:19.770 に答える