filter - 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 分析时,得到的结果如下:
我的理解是,如果突出显示任何结果,则表示匹配,但是当我在 Solr 中的“管理员”上进行搜索时,找不到任何结果:
如果我搜索:
Administrator's
我确实得到了预期的结果。
我完全想念分析工具应该如何工作的理解?
我想要实现的是一个支持很多技术项目的搜索索引,它只会匹配精确的值。例如:
- V-123-1231-1231
- WILL_NOT_CHANGE
- /mnt/abc/驱动程序/
- 4040:5050
所以 WhitespaceTokenizer 似乎是最有意义的,但我还需要对非技术字符串进行词干处理,这些字符串将由句点 (.)、破折号 (-)、下划线 (_)、斜杠 (\ 或 /) 等表示。
任何见解/建议将不胜感激。
解决方案
基于进一步的调查和提升最新版本的 Solr (8.7) 与非常老的 corp. 我们正在使用的版本(6.4.2)。
加上上面 Abhijit 的强化,我发现 Solr 的“完整记录”搜索并不像我预期的那样工作。
相反,我需要:
- 将我想要索引的所有字段复制到单个多值字段中(例如 content_all)
- 然后我需要添加查询参数: df=content_all 执行。
一旦我这样做了,我就开始得到我期望的结果。
对于那些定期使用 solr/lucene 的人来说可能很明显,但我不清楚。切换到没有“默认字段”的 8.7,让我了解这个解决方案。
希望这对将来的其他人有所帮助。
推荐阅读
- arraylist - 为什么 Kotlin 不允许我将元素添加到数组列表
- r - 各种错误传单上传到 RPubs
- python - 给出错误结果的代码未按方面运行
- node.js - 在 GET 请求上关闭了意外的连接
- qt - 如何格式化信用卡文本编辑小部件?
- vue-router - Nuxt:如何在新标签页中打开页面
- python - 列表中的最大值
- python - 如何通过 Django App 中的 Mixins 跟踪 ListView、其他视图和 url
- perl - 如何通过 last/next 强制退出 perl 子例程/闭包以自动使程序失败?
- ruby-on-rails - 在 Rails 中,当我运行 bin/rspec 时如何运行所有模型测试?