簡體   English   中英

如何查詢 SOLR 的空字段?

[英]How to query SOLR for empty fields?

我有一個很大的 solr 索引,我注意到一些字段沒有正確更新(索引是動態的)。

這導致某些字段的“id”字段為空。

我已經嘗試過這些查詢,但沒有奏效:

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

有沒有辦法查詢空字段?

謝謝

嘗試這個:

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

一個警告! 如果您想通過 OR 或 AND 組合它,則不能以這種形式使用它:

-myfield:*

但你必須使用

(*:* NOT myfield:*)

這種形式是完全可組合的。 顯然 SOLR 會將第一種形式擴展到第二種形式,但僅當它是頂部節點時。 希望這可以為您節省一些時間!

根據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() 覆蓋,查看 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));

您可以使用過濾器查詢 q=*:*&fq=-id:*

此處添加了一條注釋,要首先使字段可搜索,它需要將 SOLR 模式中的字段類型設置為“indexed = true”。 然后您可以使用“ field_name:* ”作為字符串類型,使用“ field_name:[* TO *] ”作為數字類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM