2012-05-31 149 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”字段类型更新了我的答案。 –