[英]Solr query data with white space needs to be queried
我是新來的solr。 我在solr中有類似“ name”:“ John Lewis”之類的數據 。 查詢形成的外觀和搜索效果完美,為fq = name%3A +%22John + Lewis%22。這是在Solr控制台中形成的,效果很好。
我的要求是搜索來自我的Java層的特定單詞“ JohnLewis” 。 在solr repo中必須將其映射為“ John Lewis”。
此搜索不僅限於名稱字段(兩個字和一個空格)。 我還有其他一些詳細信息,例如“現金獎勵信用卡” ,它有4個字,用戶會查詢類似“ CashRewardCreditCards” 。
如果可以使用solr中可用的任何解析器在schema.xml中進行處理,那么有人可以幫助我。
您需要創建自定義fieldType。
首先在您的Solr模式中定義一個fieldType:
<fieldType name="word_concate" class="solr.TextField" indexed="true" stored="false">
<analyzer>
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\s*" replacement=""/>
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
</fieldType>
在這里,我們將fieldType命名為word_concate
。
我們使用了CharFilterFactories的solr.PatternReplaceCharFilterFactory
字符過濾器是對輸入字符進行預處理的組件。 字符過濾器可以像令牌過濾器一樣鏈接在一起,並放置在令牌生成器的前面。 PatternReplaceCharFilterFactory過濾器使用正則表達式替換或更改字符模式
模式: \\s*
表示零個或多個空格字符
其次創建一個以word_concate作為類型的字段:
<field name="cfname" type="word_concate"/>
使用復制字段將您的姓名字段復制到cfname
<copyField source="name" dest="cfname"/>
第三重新索引數據。
現在您可以查詢: cfname:"JohnLewis"
它將返回名稱John Lewis
假設您的輸入是CamelCase,如圖所示,我將使用Solr的Word Delimiter Filter,並在分析器的查詢側將splitOnCaseChange參數作為起點。 這將使用輸入令牌,例如CashRewardCreditCards並生成令牌Cash Reward Credit Cards
也可以看看:
它具有splitOnCaseChange
屬性。 如果將其設置為1,JohnLewis將被索引為John Lewis。
您需要將此添加到查詢分析器。 如果用戶搜索JohnLewis,則搜索結果將翻譯為John Lewis。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.