我有一个带连字符的字。就我而言,它是"重复使用"。我希望能够匹配它,重新使用","重用"并且"重新使用"。
如果我使用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的回答表明它会吗?
答案 0 :(得分:1)
如果要进行索引时间扩展,则足以定义重用的同义词规则。 说,你有可以重复使用。然后将其转换为重用。然后应用SynonymFilter,以便在相同的索引位置重用,重用,“其他东西”。当您搜索“其他内容”时,无论您创建多少次重复使用,都可以获得匹配。