簡體   English   中英

如何將 Solr 中的精確搜索與空格匹配

[英]How to match exact Search in Solr with space

當兩個單詞之間存在空格時如何搜索單詞的一部分。 我的查詢如下

/select?q=*:*&fq=pageType:program&fl=programLocation&rows=100&fq=programLocation:"Mohali"

我得到的結果如下

"response":{"numFound":3,"start":0,"docs":[
      {
        "programLocation":["Mohali"]},
      {
        "programLocation":["Mohali"]},
      {
        "programLocation":["Mohali and Hyderabad"]}]

我只想檢索“Mohali”,但現在我得到了“Mohali”和“Mohali and Hyderabad”。 如何形成僅獲取 Mohali 的查詢?

您需要將string用作字段fieldtype的字段programLocation

應用字符串作為fieldtype並重新索引數據。

<field name="programLocation" type="string" indexed="true" stored="true" required="true" multiValued="false" />

String將單詞/句子存儲為一個精確的字符串,而不對其執行任何標記化。 它在存儲精確匹配的情況下很有用,例如,用於分面、排序。

string類型相反的是text Text對數據進行標記化,執行小寫等處理。這在我們想要匹配句子的一部分時很有幫助。

如果您想實現小寫搜索,請為您的字段使用以下字段類型。

<fieldType name="forExactMatch" class="solr.TextField" sortMissingLast="true" omitNorms="true">
      <analyzer>
        <!-- KeywordTokenizer does no actual tokenizing, so the entire
             input string is preserved as a single token
          -->
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <!-- The LowerCase TokenFilter does what you expect, which can be
             when you want your sorting to be case insensitive
          -->
        <filter class="solr.LowerCaseFilterFactory" />
      </analyzer>
    </fieldType>

如果你有空格,你也可以在小寫過濾器工廠之后使用下面的過濾器。

<filter class="solr.TrimFilterFactory" />

然后您的字段定義將如下所示

<field name="programLocation" type="forExactMatch" indexed="true" stored="true"/>

對於與 lucene 的精確匹配,請在 java 中搜索

?q="Your search"~0

您可以使用 integer 來定義單詞之間的最大距離

?q="Your search"~2

示例:“這是一個非常棒的完全匹配示例”

  • ?q="awesome exemple"~0將匹配
  • ?q="awesome exact match"~0不匹配
  • ?q="awesome exact match"~2將匹配

暫無
暫無

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

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