2017-03-26 87 views
0

我是solr的新手。我有數據解決類似「名稱」:「約翰劉易斯」。 查詢形成的外觀和完美搜索fq = name%3A +%22John + Lewis%22 這是在Solr控制檯中形成的,並且運行良好。索爾空間查詢數據需要查詢

我的要求是搜索來自我的Java層的特定單詞「JohnLewis」。它必須在solr repo中與「John Lewis」進行映射。

此搜索不僅限於名稱字段(2個字和中間的空格)。 我有一些其他的細節,如「現金獎勵信用卡」,它有4個單詞,用戶會像「CashRewardCreditCards」查詢。

如果可以在schema.xml中使用solr中提供的任何解析器來處理此問題,是否有人可以幫助我解決這個問題。

+0

什麼是您的數據。你正在尋找JohnLewis本身還是包含在其他文本中?如果單獨使用,那麼下面的Ashraful解決方案應該可以工作(從輸入中刪除空格)。 –

回答

1

您需要創建自定義fieldType。

首先在你的Solr模式定義的字段類型:

<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> 

這裏我們命名字段類型爲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

0

WordDelimiterFilterFactory

它有一個splitOnCaseChange屬性。如果你將它設置爲1,JohnLewis將被編入John Lewis。

您需要將其添加到您的查詢分析器。如果用戶搜索JohnLewis,搜索將被翻譯爲John Lewis。