[英]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.