Как запросить SOLR для пустых полей?



У меня большой индекс solr, и я заметил, что некоторые поля не обновляются правильно (индекс является динамическим).



это привело к тому, что некоторые поля имеют пустое поле "id".



Я пробовал эти запросы, но они не работают:



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


есть ли способ запросить пустые поля?



спасибо

493   7  

7 ответов:

попробуйте это:

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

по данным SolrQuerySyntax, вы можете использовать q=-id:[* TO *].

один нюанс! Если вы хотите составить это через ИЛИ ИЛИ и вы не можете использовать его в этой форме:

-myfield:*

но вы должны использовать

(*:* NOT myfield:*)

эта форма прекрасно сочетаются. По-видимому, SOLR расширит первую форму до второй, но только когда это верхний узел. Надеюсь, это сэкономит вам некоторое время!

Если у вас большой индекс, вы должны использовать значение по умолчанию

   <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 (), выглядит, если отрицательный параметр имеет значение true

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

при вызове параметра creator, если это отрицательное значение. Простое изменение свойства

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

вы можете сделать это с помощью запроса с фильтром q=*: * &fq= - id:*

Comments

    Ничего не найдено.