2015-02-09 97 views
0

我有一個很大的問題和有關solr行爲的問題,請你幫我解決這個問題。Solr中的準確字母匹配與文本字段的單個/多個字

不介意我的問題太長了。

我的客戶有如下要求。

  • 我們需要一個matchall和matchallpartial場景。
  • 這取決於我們在應用程序級別執行matchall或matchallpartial的搜索字段。

我們也有通配符,左邊和右邊都是通配符條目。

我使用關鍵詞標記器進行索引以及查詢它是滿足我在所有情況下的需求。但同義詞,停用詞和詞幹根本不工作。因爲我使用關鍵詞標記器,它正在構建整個短語的查詢。我試過與StandaradTokenizer工廠它僅失敗matchall情況下,它仍然工作正常。

請問您可以發佈一些示例查詢和建議,以獲得與單個單詞/多字的精確匹配。

例如 如果我的領域有 「指標指標組件」這是整個短語。即使我正在尋找「指標」我不想要的結果即將獲得結果。

如果我使用關鍵詞tokenizer,我得到了我想要的但它在同義詞,停用詞方案中失敗。

有些時候(取決於邏輯)我將使用matchallpartial場景的相同文本提交時間,我希望「indicator」的結果如何通過stadardtokenizer獲得整個短語/單詞的準確matchall。

請幫幫我。

感謝, 斯里蘭卡

+0

不要忘記你可以索引多次相同的字段與不同的標記化;您可以使用查詢部分匹配的標記化版本,以及查詢完整匹配的更確切版本。 – Yann 2015-02-09 15:23:24

+0

Yann如何在不同的領域使用不​​同的標記器。 – 2015-02-19 14:59:28

+0

是的,您可以在您的模式中定義各種fieldTypes;通常爲了完全匹配,您將使用KeywordTokenizerFactory(實際上不實際標記),對於部分匹配,則使用StandardTokenizerFactory。您可以在兩個字段(每個字段都有一個字段)中編制相同的內容,並根據您想要的匹配類型,查詢或其他字段進行索引。 – Yann 2015-02-19 15:15:08

回答

0

我列出兩個例子這必將有助於獲得精確匹配

我的第一個查詢是: - /select?q=name:anand kishore - 通過這種方式,我會得到1000條記錄,這將是具有名阿南德或紀或兩者

我的第二個查詢: - /select?q=name:"anand kishore" - 通過這一點,我會得到的,這將有阿南德紀等,這些記錄(阿南德紀tripathy卡邁勒·阿南德紀)

個結果

我的第三個查詢是: - /select?q=name:"kamal anand kishore" - 通過這我會得到只有一個匹配的結果,即kamal anand kishore

+0

選擇?q =(sectionName_text_en_gb :(「指標組件」^ 10.0))我沒有得到任何結果。我現在使用的StadardKeyywordTokenizer – 2015-02-19 14:58:17

+0

工作對我來說這是我使用的領域 <字段類型名稱=「text_general」級=「solr.TextField」 positionIncrementGap =「100」> \t \t <分析型=「指數」> 什麼\t \t \t \t \t \t <過濾器類= 「solr.StopFilterFactory」 IGNORECASE = 「真」 的話= 「stopWords.txt中」/> \t \t \t <! - 在這個例子中,我們只會在查詢時使用同義詞 - > \t \t \t <過濾器類= 「solr.LowerCaseFilterFactory」/> \t \t \t \t <分析器類型= 「查詢」> \t \t \t繼續.... – Swaraj 2015-02-20 05:34:33

+0

\t \t \t <過濾器類= 「solr.StopFilterFactory」 IGNORECASE = 「真」 的話= 「stopWords.txt中」/> \t \t \t <過濾器類= 「solr.SynonymFilterFactory」 同義詞= 「synonyms.txt」 IGNORECASE = 「真」 擴大= 「真」/> \t \t \t <過濾器類= 「solr.LowerCaseFilterFactory」/> \t \t \t – Swaraj 2015-02-20 05:35:21