2016-03-05 29 views
1

我已閱讀過去幾天的大量頁面,但可以找到用於配置字段分析器的以下情況的任何樣本:
- 字段值可能同時包含?和*:
SOLR:如何在字段值中使用通配符和問號

  • abcdef1;
  • ab?de?2;
  • abc?e *。
- 查詢也可能包含它:
  • 「ab ?? e *」和「ab *」 - 因爲結果應該解析所有文檔;
  • 「ab1 *」 - 只有秒。

是否可以通過這種方式配置SOLR?

+1

請重新設置問題主體的格式。這很難遵循。 –

+0

好的,現在應該更清楚了。 –

回答

0

在這種情況下,您可能需要創建字段類型並將其應用於您的字段。

你的字段類型應該包含這樣的標記器和過濾器,它們將生成標記。

您可以在solr wiki頁面上閱讀有關使用標記器和過濾器的更多信息。

您還可以使用不同的分析器進行索引和查詢。

這也取決於您的要求。

我建議你試試下面的字段類型。

您可以在schema.xml中添加下面的字段類型。 使用「partial_search」fieldType作爲您要執行部分/通配符搜索的字段。

完成schema.xml更改後,您需要重新啓動服務器並重新索引數據。

<fieldType name="partial_search" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="10"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
    </analyzer> 
</fieldType> 
+1

不允許使用多個標記器,因此它應該如下所示: <標記生成器類= 「solr.KeywordTokenizerFactory」/> <過濾器類= 「solr.NGramFilterFactory」 minGramSize = 「2」 maxGramSize = 「10」/> <過濾器類= 「solr.LowerCaseFilterFactory」/> <分析器類型= 「查詢」> <過濾器類= 「solr.LowerCaseFilterFactory」/> ' –

+0

反正你的方法是良好的並覆蓋,大量鄰f變體,除了以下內容:field ='ab?de?2'和query ='ab1 *'。另一個:field ='ab *'和query ='ab1234'。 –

+0

我認爲ab?de?2是不可能實現的......因爲你不能創建任何這樣的標記......你仍然可以嘗試從你的最後...我建議使用ngram你可以能夠實現部分或通配符搜索...當你有像'abhijit'這樣的文本...然後使用上面的字段類型,你將創建像ab,abh,abhi,abhij,Abhijit,Abhijit,bh,bhi,bhij ...等,如果你查詢..bhi ..然後你應該得到的結果爲abhijit ... –