1

ブロックのモデル内searchableには index がありますtime added_at

search検索のブロックで を追加しwith(:added_at, nil)、再インデックスを作成し、searchオブジェクト内に次のようにしました。

<Sunspot::Search:{:fq=>["-added_at_d:[* TO *]"]...}>

この [* TO *] の意味は何ですか? 何か問題が発生しましたか?

4

1 に答える 1

2

追加することで、フィールドadded_atwith(:added_at, nil)に値がないドキュメントに検索結果を絞り込むため、対応するクエリ フィルターが次のように定義されることが期待できます。

fq=>["added_at_d:null"] # not valid

問題は、Solr 標準クエリ パーサーが空/null 値のフィールド検索をサポートしていないことです。この状況では、クエリが有効なままになるように、フィルターを無効にする必要があります (フィールドに任意の値を持つドキュメントを除外します)。

演算子-を使用してフィールドを除外し、ワイルドカード文字*を使用して任意の値に一致させることができます。クエリ フィルターは次のようになります。

fq=>["-added_at_d:*"] 

ただし、上記はクエリ パーサーには有効ですが、否定的なサブクエリ内でワイルドカードを使用する場合の一貫性のない動作を防ぐために、範囲クエリを使用することをお勧めします。

範囲クエリを使用すると、フィールド値が範囲クエリで指定された下限と上限の間にあるドキュメントを照合できます。範囲クエリは、上限と下限を含む場合と含まない場合があります。

*いずれかまたは両方のエンドポイントにAを使用して、制限のない範囲クエリを指定できます。

最終的には、次のようになるこのフィルターに問題はありません。

fq=>["-added_at_d:[* TO *]"]

参照。Lucene 範囲クエリSolr 標準クエリ パーサー

于 2016-10-07T14:34:04.780 に答える