Solr 基于文件的拼写检查无法检测到拼写正确的单词

问题描述 投票:0回答:1

我有一个可用的 Solr v9.4.1 安装,我想向其中添加基于文件的拼写检查。

我想添加基于文件的拼写检查,以便我可以识别拼写正确的搜索词,即使它们没有出现在可搜索文档的主索引中。

按照 Apache Solr 文档,我设置了基于文件的拼写检查,以及引用定义的基于文件的拼写检查的请求处理程序端点:

    <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
        <lst name="spellchecker">
            <str name="classname">solr.FileBasedSpellChecker</str>
            <str name="name">filebased</str>
            <str name="sourceLocation">dictionary.txt</str>
            <str name="characterEncoding">UTF-8</str>
            <str name="spellcheckIndexDir">./spellcheckerFile</str>
        </lst>
    </searchComponent>

    ...

    <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
        <lst name="defaults">
            <str name="df">suggest</str>
            <str name="spellcheck.dictionary">filebased</str>
            <str name="spellcheck.extendedResults">true</str>
            <str name="spellcheck.count">3</str>
            <str name="spellcheck.maxResultsForSuggest">0</str>
        </lst>
        <arr name="last-components">
            <str>spellcheck</str>
        </arr>
    </requestHandler

但是,对这个新请求处理程序端点的每个查询都会导致误报:...

"correctlySpelled":false
...

当提供另一个术语的建议之一作为查询术语时,甚至会发生这种情况。例如,“ablation”和“oblation”均作为对方的建议正确拼写提供,但在用作查询术语时,两者均被视为拼写错误。

即使有这些结果,我确信 Solr 实际上指的是我定义的字典文件,因为像“ablation”和“oblation”这样的词不会出现在可搜索文档的主索引中的任何位置,所以唯一的方法Solr 可以通过从指定的字典文件中读取它们来了解它们并提供建议。

有人成功使用基于文件的拼写检查吗?

是否需要采取 Solr 文档中未详细说明和/或完全清楚的具体步骤?

有人可以分享他们的 Solr 配置来进行基于文件的拼写检查吗?

(或者,是否有另一种方法可以实现主要目标:“识别拼写正确的搜索词,即使它们没有出现在可搜索文档的主索引中”?)

solr spell-checking
1个回答
0
投票

由于没有直接解决这个问题,我决定将字典术语添加到主索引中。

我首先将字典术语添加到我们数据库中的一个新表中,该数据库与可搜索材料的主语料库的数据源相同。 (在此数据库中,与常规数据相比,添加的数据量很小。)然后,我使用 (a) 字段对字典术语进行索引,该字段将使它们作为结果找到,以及 (b) 一个字段来区分这些字典术语常规结果的结果。 最后,我向查询 Solr 的应用程序的调用代码添加了逻辑,以便能够检测给定结果集何时仅包含这些字典术语。 这让我知道用户何时提供了拼写正确的单词,但该单词也不匹配任何常规材料。

© www.soinside.com 2019 - 2024. All rights reserved.