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

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

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

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

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

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

Спасибо

Ответ 1

Попробуйте следующее:

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

Ответ 2

Одно предостережение! Если вы хотите создать это через OR или AND, вы не сможете использовать его в этой форме:

-myfield:*

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

(*:* NOT myfield:*)

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

Ответ 3

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

Ответ 4

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

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

а затем запросите это значение по умолчанию. Это намного эффективнее, чем q = -id: ["" TO *]

Ответ 5

Вы также можете использовать его так.

fq=!id:['' TO *]

Ответ 6

Если вы используете 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() : "");

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

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

Ответ 7

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

Ответ 8

Просто ищу ?q=field:NULL у меня сработало ?q=field:NULL