Solrインデックスが大きく、一部のフィールドが正しく更新されていないことに気付きました(インデックスは動的です)。
これにより、一部のフィールドに「id」フィールドが空になります。
私はこれらのクエリを試しましたが、うまくいきませんでした:
id:''
id:NULL
id:null
id:""
id:
id:['' TO *]
空のフィールドをクエリする方法はありますか?
ありがとう
Solrインデックスが大きく、一部のフィールドが正しく更新されていないことに気付きました(インデックスは動的です)。
これにより、一部のフィールドに「id」フィールドが空になります。
私はこれらのクエリを試しましたが、うまくいきませんでした:
id:''
id:NULL
id:null
id:""
id:
id:['' TO *]
空のフィールドをクエリする方法はありますか?
ありがとう
回答:
これを試して:
?q=-id:["" TO *]
?q=-id:*
が得るならCannot parse '-q:*': '*' or '?' not allowed as first character in WildcardQuery
?q=-id:*
期待どおりに動作するようです。おそらく、解析エラーはこの問題に関連しています。
Lucene Specification Version: 3.2.0
私が使っていました。Solr 4.5.1で構文を追加してくれてうれしい。
注意点が1つあります。これをORまたはANDで作成する場合は、次の形式では使用できません。
-myfield:*
しかし、あなたは使用しなければなりません
(*:* NOT myfield:*)
このフォームは完全に合成可能です。明らかにSOLRは最初のフォームを2番目のフォームに展開しますが、それがトップノードである場合に限られます。これにより時間を節約できることを願っています!
SolrQuerySyntaxによると、を使用できますq=-id:[* TO *]
。
大きなインデックスがある場合は、デフォルト値を使用する必要があります
<field ... default="EMPTY" />
次に、このデフォルト値を照会します。これはq = -id:["" TO *]よりもはるかに効率的です。
こんな使い方もできます。
fq=!id:['' TO *]
SolrSharpを使用している場合、否定クエリはサポートされません。
QueryParameter.csを変更する必要があります(新しいパラメーターを作成します)
private bool _negativeQuery = false;
public QueryParameter(string field, string value, ParameterJoin parameterJoin = ParameterJoin.AND, bool negativeQuery = false)
{
this._field = field;
this._value = value.Trim();
this._parameterJoin = parameterJoin;
this._negativeQuery = negativeQuery;
}
public bool NegativeQuery
{
get { return _negativeQuery; }
set { _negativeQuery = value; }
}
そしてQueryParameterCollection.csクラスで、ToString()オーバーライドは、Negativeパラメータがtrueかどうかを調べます
arQ[x] = (qp.NegativeQuery ? "-(" : "(") + qp.ToString() + ")" + (qp.Boost != 1 ? "^" + qp.Boost.ToString() : "");
パラメータクリエータを呼び出すとき、それが負の値の場合。プロパティを変更するだけ
List<QueryParameter> QueryParameters = new List<QueryParameter>();
QueryParameters.Add(new QueryParameter("PartnerList", "[* TO *]", ParameterJoin.AND, true));