Ответ 1
Попробуйте следующее:
?q=-id:["" TO *]
У меня большой индекс solr, и я заметил, что некоторые поля не обновляются правильно (индекс динамический).
Это привело к тому, что некоторые поля имели пустое поле "id".
Я пробовал эти запросы, но они не работали:
id:''
id:NULL
id:null
id:""
id:
id:['' TO *]
Есть ли способ запросить пустые поля?
Спасибо
Попробуйте следующее:
?q=-id:["" TO *]
Одно предостережение! Если вы хотите создать это через OR или AND, вы не сможете использовать его в этой форме:
-myfield:*
но вы должны использовать
(*:* NOT myfield:*)
Эта форма идеально подходит. По-видимому, SOLR будет расширять первую форму до второй, но только тогда, когда она является верхней node. Надеюсь, это сэкономит вам время!
В соответствии с SolrQuerySyntax вы можете использовать q=-id:[* TO *]
.
Если у вас большой индекс, вы должны использовать значение по умолчанию
<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() : "");
Когда вы вызываете создателя параметра, если это отрицательное значение. Простое изменение свойства
List<QueryParameter> QueryParameters = new List<QueryParameter>();
QueryParameters.Add(new QueryParameter("PartnerList", "[* TO *]", ParameterJoin.AND, true));
вы можете сделать это с помощью фильтра д = *: * & FQ = -id: *
Просто ищу ?q=field:NULL
у меня сработало ?q=field:NULL