Ich habe einen großen solr-Index und festgestellt, dass einige Felder nicht korrekt aktualisiert werden (der Index ist dynamisch).
Dies hat dazu geführt, dass einige Felder ein leeres "id" -Feld haben.
Ich habe diese Abfragen ausprobiert, aber sie haben nicht funktioniert:
id:''
id:NULL
id:null
id:""
id:
id:['' TO *]
Gibt es eine Möglichkeit, leere Felder abzufragen?
Vielen Dank
Versuche dies:
?q=-id:["" TO *]
Eine Einschränkung! Wenn Sie dies über OR oder AND komponieren möchten, können Sie es nicht in dieser Form verwenden:
-myfield:*
aber du musst verwenden
(*:* NOT myfield:*)
Diese Form ist perfekt zusammensetzbar. Anscheinend wird SOLR das erste Formular auf das zweite erweitern, aber nur, wenn es ein oberster Knoten ist. Hoffe das spart dir etwas Zeit!
Entsprechend SolrQuerySyntax können Sie q=-id:[* TO *]
.
Wenn Sie einen großen Index haben, sollten Sie einen Standardwert verwenden
<field ... default="EMPTY" />
fragen Sie dann nach diesem Standardwert. Dies ist viel effizienter als q = -id: ["" TO *]
Sie können es auch so verwenden.
fq=!id:['' TO *]
Wenn Sie SolrSharp verwenden, werden negative Abfragen nicht unterstützt.
Sie müssen QueryParameter.cs ändern (Erstellen Sie einen neuen Parameter)
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; }
}
In der QueryParameterCollection.cs-Klasse prüft die Überschreibung von ToString (), ob der Negative-Parameter true ist
arQ[x] = (qp.NegativeQuery ? "-(" : "(") + qp.ToString() + ")" + (qp.Boost != 1 ? "^" + qp.Boost.ToString() : "");
Wenn Sie den Parameterersteller aufrufen, wenn es ein negativer Wert ist. Einfach die Eigenschaften ändern
List<QueryParameter> QueryParameters = new List<QueryParameter>();
QueryParameters.Add(new QueryParameter("PartnerList", "[* TO *]", ParameterJoin.AND, true));
sie können dies mit der Filterabfrage q = *: * & fq = -id: * tun.