簡體   English   中英

需要查詢帶有空白的Solr查詢數據

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

也可以看看:

https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions#FilterDescriptions-WordDelimiterFilter

看一下WordDelimiterFilterFactory

它具有splitOnCaseChange屬性。 如果將其設置為1,JohnLewis將被索引為John Lewis。

您需要將此添加到查詢分析器。 如果用戶搜索JohnLewis,則搜索結果將翻譯為John Lewis。

暫無
暫無

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

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