it-swarm.com.de

Wie fragt man SOLR nach leeren Feldern ab?

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

104
user188962

Versuche dies:

?q=-id:["" TO *]
132
netcoder

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!

77
KK1402

Entsprechend SolrQuerySyntax können Sie q=-id:[* TO *].

69
Yuval F

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 *]

10
Matthias M

Sie können es auch so verwenden.

fq=!id:['' TO *]
2
user1976546

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.

1
Nimrod Cohen