如何在Solr中对短语进行标记并获得方面

时间:2013-01-22 11:48:40

标签: solr tokenize

我希望根据.txt文件中的给定短语对数据进行标记。 通常,facet查询为我提供了空格标记化方面。但我希望结果是这样的。

例如,对于字段“test_data”,我的数据是“aaa bbb-ccc ddd eee”,facet应该是这样的

<lst name="test_data">
    <int name="aaa">1</int>
    <int name="bbb-ccc">1</int>
    <int name="ddd eee">1</int>
</lst>

和somefile.txt将有“bbb-ccc”&amp; “ddd eee”作为短语

由于

2 个答案:

答案 0 :(得分:1)

我刚刚发现KeepWordFilterFactory可以完成这项工作。我在架构中添加了这个字段类型

<fieldType name="text_keepword" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.KeepWordFilterFactory" words="keepwords.txt" ignoreCase="false" enablePositionIncrements="false"/>
    </analyzer>
</fieldType>

和此字段

<field name="keep_fld" type="text_keepword" indexed="true" stored="true"/>

答案 1 :(得分:0)

如果您不想构建自己的Tokenizer,可以使用PatternTokenizer:

  

例如,您有一个术语列表,以分号和分隔符分隔   零个或多个空格:老鼠;小猫;犬。

<fieldType name="semicolonDelimited" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.PatternTokenizerFactory" pattern=";\s*" />
  </analyzer>
</fieldType>

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.PatternTokenizerFactory

这样你可以在其中添加自己的正则表达式。