Как запросить SOLR для пустых полей?
У меня большой индекс solr, и я заметил, что некоторые поля не обновляются правильно (индекс является динамическим).
это привело к тому, что некоторые поля имеют пустое поле "id".
Я пробовал эти запросы, но они не работают:
id:''
id:NULL
id:null
id:""
id:
id:['' TO *]
есть ли способ запросить пустые поля?
спасибо
7 ответов:
по данным SolrQuerySyntax, вы можете использовать
q=-id:[* TO *].
один нюанс! Если вы хотите составить это через ИЛИ ИЛИ и вы не можете использовать его в этой форме:
-myfield:*но вы должны использовать
(*:* NOT myfield:*)эта форма прекрасно сочетаются. По-видимому, SOLR расширит первую форму до второй, но только когда это верхний узел. Надеюсь, это сэкономит вам некоторое время!
Если у вас большой индекс, вы должны использовать значение по умолчанию
<field ... default="EMPTY" />и затем запрос для этого значения по умолчанию. Это намного эффективнее, чем q= - 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));
Comments