Solr / Lucene:可以将字符串标记化吗?

时间:2011-01-19 16:35:42

标签: string text lucene solr

我正在为电影片头编制索引。目前我有两个领域。

一个是预先配置的textgen,一个是字符串,我将其更改为不区分大小写。

我使用copyfield指令在两个字段中索引相同的数据。

我正在使用dismax请求处理程序。

我这样做是为了能够在“戒指之王”的标题中找到“领主戒指”,但也可以提升完全匹配。因此,例如“领主或戒指”得分高于“领主的戒指”,但两者都被发现。

现在我玩了字符串字段,这似乎是完全匹配所必需的。

但我没有得到任何结果。如果我搜索确切的字符串,我只会得到结果。甚至空间都没有工作......

  • 甚至可以自定义字符串
  • 您会为此用例推荐哪些字段配置/分析?

2 个答案:

答案 0 :(得分:2)

“字符串”字段未标记化(因此只有完全匹配才有效);您可以尝试将其数据类型切换为“文本”,或者将WhitespaceTokenizer添加到您的链中。

此外,您不需要手动提升完全匹配,评分算法将为您完成。

答案 1 :(得分:2)

看看示例solr / conf / schema.xml,有很多不同类型的字段,有很好的文档。

对于您的搜索类型,您可能需要一个带有位置的简单标记化的低位字段,例如:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.StandardFilterFactory"/>
      <filter class="solr.ASCIIFoldingFilterFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

这个排名应该非常好。

对于标准文本搜索,使用“停用词”和“词干”来提高排名(如下面的字段)但是对于搜索标题,我可能不会这样做:

 <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords_spanish.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.SnowballPorterFilterFactory" language="English">
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.SnowballPorterFilterFactory" language="English"/\
>
      </analyzer>
    </fieldType>