124 votes

Comment interroger SOLR pour les champs vides?

J'ai un index Solr volumineux et j'ai remarqué que certains champs n'étaient pas mis à jour correctement (l'index est dynamique).

Cela a eu pour résultat que certains champs ont un champ "id" vide.

J'ai essayé ces requêtes, mais elles n'ont pas fonctionné:

  id:''
 id:NULL
 id:null
 id:""
 id:
 id:['' TO *]
 

Existe-t-il un moyen d'interroger les champs vides?

Merci

155voto

netcoder Points 31874

Essaye ça:

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

70voto

Yuval F Points 15248

Selon SolrQuerySyntax , vous pouvez utiliser q=-id:[* TO *] .

12voto

Matthias Points 185

Si vous avez un index volumineux, vous devez utiliser une valeur par défaut

    <field ... default="EMPTY" />
 

puis interrogez cette valeur par défaut. C'est beaucoup plus efficace que q = -id: ["" TO *]

1voto

Si vous utilisez SolrSharp, il ne prend pas en charge les requêtes négatives.

Vous devez changer QueryParameter.cs (Créer un nouveau paramètre)

 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; }
}
 

Et dans la classe QueryParameterCollection.cs, le remplacement de ToString () recherche si le paramètre Negative est true.

 arQ[x] = (qp.NegativeQuery ? "-(" : "(") + qp.ToString() + ")" + (qp.Boost != 1 ? "^" + qp.Boost.ToString() : "");
 

Lorsque vous appelez le créateur du paramètre, s'il s'agit d'une valeur négative. Simple changement de la propriété

 List<QueryParameter> QueryParameters = new List<QueryParameter>();
QueryParameters.Add(new QueryParameter("PartnerList", "[* TO *]", ParameterJoin.AND, true));
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X