Solr - 仅在文本字段中匹配整个单词

时间:2013-12-22 14:19:32

标签: solr exact-match

我有一个文本字段,可以包含很长的值(如文本文件)。 我想为它创建字段类型(文本,而不是字符串),以便在记事本++中使用“仅匹配整个单词”,但分隔符不应该只是空格。 如果我有:

myName = aaa bbb

我想得到以下搜索字符串“aaa”,“bbb”,“aaa bbb”,“myName = aaa bbb”,“myName”,但不是“aa”或“ame = a”或“一个bb”。 另一个例子是:

<myName>aaa bbb</myName> 

我能以某种方式这样做吗?

我的字段类型定义应该是什么?

[编辑]文本可以包含任何字符。在搜索之前,我正在使用http://lucene.apache.org/solr/4_2_1/solr-solrj/org/apache/solr/client/solrj/util/ClientUtils.html

转义搜索字符串

由于

1 个答案:

答案 0 :(得分:0)

从开始,(为什么你需要转义特殊字符?,你需要让它们在索引和查询时都被标记化):

<!-- A general text field that has reasonable, generic
         cross-language defaults: it tokenizes with StandardTokenizer,
     removes stop words from case-insensitive "stopwords.txt"
     (empty by default), and down cases.  At query time only, it
     also applies synonyms. -->
    <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" />
        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

这是学习如何在索引和查询时处理文本的好地方。非常有用的管理工具:http://localhost:8983/solr/#/collection1/analysis