Lucene 标记化/过滤器未按预期工作 | Solr分析混乱

问题描述

我正在尝试为我的 Solr/lucidworks 设置中的分析器配置找出正确的配置。

我在 Solr 分析中看到的结果似乎表明我应该得到匹配项,但是当我执行 Solr 查询(本机或在 lucidworks UI 中)时,没有返回任何结果。

来自架构的相关片段是:

<field name="content" indexed="true" multiValued="false" required="false" stored="true" type="dlowe_text_en"/>


<dynamicField indexed="true" name="*_txt_en_dlowe_split_tight" stored="true" type="dlowe_text_en"/>
<fieldType autoGeneratePhraseQueries="true" class="solr.TextField" name="dlowe_text_en" positionIncrementGap="100">
    <analyzer>
        <tokenizer class="solr.WhitespacetokenizerFactory"/>
        <filter class="solr.EnglishPossessiveFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespacetokenizerFactory"/>
        <filter class="solr.EnglishPossessiveFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

我已经索引了一些包含字符串的内容

Administrator's Guide

现在,当我使用 Solr 分析时,这是我得到的结果:

enter image description here

我的理解是,如果突出显示任何结果,则表示匹配,但是当我在 Solr 中对“管理员”进行搜索时,没有找到任何结果:

enter image description here

如果我搜索

Administrator's

我确实得到了预期的结果。

我完全不了解分析工具应该如何工作?

我想要实现的是一个支持很多技术项目的搜索索引,它只会匹配精确的值。例如:

  • V-123-1231-1231
  • WILL_NOT_CHANGE
  • /mnt/abc/Drivers/
  • 4040:5050

所以 Whitespacetokenizer 似乎最有意义,但我还需要对非技术字符串进行词干,这些字符串由句点 (.)、破折号 (-)、下划线 (_)、斜线 (\ 或 /) 表示等

任何见解/建议将不胜感激。

解决方法

基于进一步调查和更新最新版本的 Solr (8.7) 与非常古老的 corp.我们使用的版本 (6.4.2)。

加上上面来自 Abhijit 的重新执行,我发现 Solr 的“全记录”搜索并没有像我预期的那样工作。

相反,我需要:

  • 将我想要索引的所有字段复制到单个多值字段中(例如 content_all)
  • 然后我需要将查询参数:df=content_all 添加到执行中。

一旦我这样做了,我就开始得到我预期的结果。

对于那些经常使用 solr/lucene 的人来说可能很明显,但我不清楚。切换到没有“默认字段”的 8.7,让我沿着这个解决方案的路径走下去。

希望这会在未来对其他人有所帮助。