2010-12-13 29 views
2

我有一個文本字段,其中包含產品代碼的正常文本(例如FI302010,RR220011等)。 我希望能夠搜索這些產品編號。 我已經在ANALYSIS-tool中試過了 - 這裏看起來應該是可以的。一個標準的文本字段會進行一些單詞分隔,將產品代碼分解爲「FI」和「302010」 - 但只要在查詢和索引中都發生同樣的情況,它就不會成爲問題。 當我查看模式瀏覽器時,我無法找到產品代碼,但我可以找到看起來像代碼版本(即30201 - 最後0個缺失)的內容。搜索Solr中的數字/產品代碼

我試過使用不同的文本類型(text_ws,textTight和文本) - 但沒有人會允許我做搜索。

如何在文本中啓用文本搜索?

感謝

回答

4

好像你需要配置該領域使用solr.KeywordTokenizerFactory作爲其分詞器。
由於名稱沒有真正表達,這個標記器將把底層字段作爲一個單獨的標記進行處理,使用空格,字母到數字,數字到字母的轉換,標點和所有標記(除非你也有這些字符過濾器)。

我不是最新的細節目前配置Solr的,但我猜對上述領域的架構中的條目可以期待類似的東西:

<fieldtype name="myProductNumberFIeld" class="solr.TextField"> 
    <analyzer> 
    <!-- can have a few filters of course --> 
    <charFilter class="solr.MappingCharFilterFactory" 
     mapping="mapping-ISOLatin1Accent.txt"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <!-- etc. --> 

    <!-- That's the main thing you need --> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 

    </analyzer> 
</fieldtype> 

更普遍的,你會想爲產品編號,零件編號,UPC等定義一個相當具體的分析儀,作爲改善對這些字段的回憶的一種方式,因爲用戶並不總是知道這些標識符的具體格式(標點符號和其他分隔符(如果有的話)應該是等等)。

然而,使用不同分析器的問題在於,它可以防止將字段與常規文本搜索相關聯,因爲在重要時間,只能有一種方法來處理用戶的查詢。

0

這實際上只適用於示例配置。

考慮到Solr 1.4.1並運行示例配置,您可以看到,如您所述,分析工具顯示這適用於股票文本字段。

然後,爲了驗證,請注意示例架構中的「功能」字段是文本類型。編輯apache-solr-1.4.1/example/exampledocs中的示例文件之一。說「monitor.xml」。將產品代碼添加到一個文檔的功能字段。 (以及任一側的空間)

將文件發佈到Solr(使用java -jar post.jar monitor.xml)。現在去搜索它。有用。檢查模式瀏覽器。顯示特徵字段中的所有術語。請注意,該數字在一個術語中本身就有。

這一切都適合我。

不知道您的架構browswer發生了什麼,也許是一個錯字?數字不被阻止。它尾隨的字符是o(字母)不是零,這可能是你的問題。

使用keywordtokenizer將不允許您查找產品代碼的數字部分,這是原始問題。