在SOLR中使用带连字符的单词

时间:2013-07-30 16:11:01

标签: solr

我有一个带连字符的字。就我而言,它是"重复使用"。我希望能够匹配它,重新使用","重用"并且"重新使用"。

如果我使用WordDelimiterFilterFactory catenateAll=1,那么它将转换"重复使用"进入"重用"。这并不包括搜索" re use"的情况。

除此之外,还有“重复使用”这个词。被用作SynonymFilterFactory的同义词,因此解决方案也必须使用它。

如果我的同义词文件显示" re-use =>其他的东西",然后我希望能够匹配"其他东西"当我键入"重新使用"或"重复使用"或者"重新使用"。我试过创建一个同义词条目,如" re use =>再利用&#34 ;.这导致匹配包含非连字版本的文档,但是不匹配"其他东西" (我不介意对匹配" re"或"使用")非常宽容。

我可以为这个单词添加一个同义词,但我想要一个通用的解决方案。有没有明显的我错过的东西?

编辑:

我有4个文件:

  • "东西"
  • "重新使用"
  • "再利用"
  • "再利用"

我想搜索这些条款中的任何一个并返回所有文档。我的架构的相关部分:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" catenateAll="1" preserveOriginal="1" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" catenateAll="1" preserveOriginal="1" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

如果我的同义词文件看起来像这样,那么一切都按预期工作。

re use, reuse, thing

但是,我想表示&#34;重新使用&#34;和&#34;重用&#34;是同义词。我也想说&#34;重用&#34;和&#34;东西&#34;,还有许多其他东西都是同义词。所以我尝试了这个:

re use, reuse
reuse, thing

这不起作用。我认为lexk的回答表明它会吗?

1 个答案:

答案 0 :(得分:1)

如果要进行索引时间扩展,则足以定义重用的同义词规则。 说,你有可以重复使用。然后将其转换为重用。然后应用SynonymFilter,以便在相同的索引位置重用,重用,“其他东西”。当您搜索“其他内容”时,无论您创建多少次重复使用,都可以获得匹配。