【问题标题】:Working with hyphenated words in SOLR在 SOLR 中使用连字符
【发布时间】:2013-08-01 00:14:41
【问题描述】:

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

如果我将WordDelimiterFilterFactorycatenateAll=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

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

re use, reuse
reuse, thing

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

【问题讨论】:

    标签: solr


    【解决方案1】:

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

    【讨论】:

    • 谢谢。这就是我的想法,但它并没有达到我的预期。查看我的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2011-11-04
    • 2012-11-14
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    相关资源
    最近更新 更多