使用Solr搜索部分单词

时间:2011-10-08 14:50:21

标签: solr sunspot

我正在尝试使用Solr搜索部分单词,但我无法使其工作。

我在schema.xml文件中使用此功能。

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
      <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" />
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
      <tokenizer class="solr.StandardTokenizerFactory"/>
       <filter class="solr.StandardFilterFactory"/>
       <filter class="solr.LowerCaseFilterFactory"/>
       <filter class="solr.PorterStemFilterFactory"/>
       <filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="1" splitOnNumerics="1" splitOnCaseChange="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" preserveOriginal="1"/>
  </analyzer>
</fieldType>

搜索die h无效,但die hard会返回一些结果。 在添加上述配置后,我重新编制了数据库索引。

Here是搜索die hard时的网址和输出。调试器已打开。

Here是搜索die h时的网址和输出。调试器已打开。

我正在使用Solr 3.3。 Hereschema.xml文件的其余部分。

1 个答案:

答案 0 :(得分:6)

您共享的查询正在搜索“title_text”字段,但您在上面发布的架构定义了“text”字段。假设这只是一个疏忽,并且title_text字段在你的帖子中被定义,我认为一个可能的问题是NGramTokenizer配置了minGramSize =“3”,并且你期望使用单字符令牌进行匹配。 / p>

您可以尝试将minGramSize更改为1,但这将不可避免地导致一些非常低效的索引;我想知道你是否真的热衷于在电影中标题为“e”匹配电影?