Как запросить SOLR для пустых полей? - PullRequest
103 голосов
/ 21 ноября 2010

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

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

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

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

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

Спасибо

Ответы [ 7 ]

131 голосов
/ 21 ноября 2010

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

?q=-id:["" TO *]
73 голосов
/ 04 марта 2015

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

-myfield:*

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

(*:* NOT myfield:*)

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

69 голосов
/ 21 ноября 2010

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

10 голосов
/ 13 января 2014

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

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

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

2 голосов
/ 09 февраля 2015

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

fq=!id:['' TO *]
1 голос
/ 10 февраля 2015

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

1 голос
/ 11 сентября 2012

Если вы используете 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 (), смотрит, является ли параметр Negative истинным

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...