2

我有一个连字符的词。就我而言,它是“重用”。我希望能够将其与“重用”、“重用”和“重用”相匹配。

如果我使用WordDelimiterFilterFactorywithcatenateAll=1那么它会将“重用”转换为“重用”。这不包括搜索“重用”的情况。

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

如果我的同义词文件显示“re-use => other thing”,那么当我输入“re-use”或“reuse”或“re use”时,我希望能够匹配“other thing”。我已经尝试过实际创建一个同义词条目,例如“重用 => 重用”。这会导致匹配包含非连字符版本的文档,但不匹配“其他东西”(我不介意对匹配“重新”或“使用”过于宽容)。

我可以为这个词添加同义词,但我想要一个通用的解决方案。有什么明显的我错过了吗?

编辑:

我有 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

但是,我想表示“重用”和“重用”是同义词。我还想说“重用”和“事物”,还有很多其他的东西是同义词。所以我尝试了这个:

re use, reuse
reuse, thing

这行不通。我认为lexk的回答表明它会?

4

1 回答 1

1

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

于 2013-07-30T17:03:16.800 回答