2012-05-31 165 views
0

我正在使用NGramFilterFactory。我的架構如下SOLR中的精確匹配

<fieldType name="c_text" class="solr.TextField"> 
<analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="255"/> 
</analyzer> 

<analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 
<field name="parentId" type="string" indexed="true" stored="true"/> 
<field name="data_s" type="c_text" indexed="true" stored="true"/> 
<field name="email" type="c_text" indexed="true" stored="true"/> 
<field name="receivedDate" type="tdate" indexed="true" stored="true"/> 

給我要讓exatc搜索短語,如「Hello World」的上data_s場,但無法做到這一點。如果我給
data_s:hello world
它將返回所有有hello或world或兩者的記錄。如果我給
data_s:「hello world」
它不會返回任何內容。

我該如何對此進行精確的詞組搜索。 我還需要搜索部分文本,如「你好」,這就是爲什麼我使用NGramFilterFactory。

所以我的要求是對精確的短語和部分文本進行搜索。

+0

一個解決方案,我發現是使用複製申請,並就這一領域和部分文本搜索的原始字段精確搜索。 –

+0

是的,那是正確的做法。 – Evan

+0

你如何做出確切的搜索? –

回答

1

我的解決方案: -

我正在使用複製字段。

<field name="content" type="text_general" indexed="true" stored="false" 
multiValued="true"/> 
<copyField source="data_s" dest="content"/> 

每當我需要進行精確搜索時,我正在搜索「內容」字段。

我用solr3.5和「text_general」被定義爲在這個版本的Solr

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
</fieldType> 
+0

您沒有指定如何聲明「text_general」類型,這將是有益的;)(我沒有在SolR 4中看到它) –

+0

@mannus,我用「text_general」字段類型更新了我的答案。 –