0

我正在使用 NGramFilterFactory。我的架构如下所示

<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"/>

我想在 data_s 字段上进行 exatc 短语搜索,例如“Hello World”,但无法做到。如果我给
data_s:hello world
它返回所有有 hello 或 world 或两者都有的记录。如果我给
data_s:"hello world"
它什么也不返回。

我怎样才能对此进行精确的短语搜索。我还需要搜索像“ello”这样的部分文本,这就是我使用 NGramFilterFactory 的原因。

所以我的要求是对确切的短语和部分文本进行搜索。

4

1 回答 1

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>
于 2012-06-06T18:27:55.477 回答