solr - Solr:使用 * 时没有返回结果
问题描述
我正在处理类似于以下内容的 solr 查询:(key:value*)。
运行时,有两种情况:
- 如果“值”是一个大词,则不返回任何结果。但是当我删除“*”时,我得到了结果。
- 如果 value 是一个小单词,则返回结果。
关于这可能是什么原因的任何想法?
解决方案
使用通配符时,不会调用大部分分析链。因此,如果您有一个被标记化、小写然后以另一种方式处理的字段(即通常使用词干过滤器),分析链不会像您期望的那样发生。
由于您使用更长的单词来观察这一点,因此它与索引时应用的词干完美匹配,但当您使用通配符时则不匹配(因为这没有意义 - 当整个令牌不存在时,阻止文本会产生非常奇怪的结果)。
您可以使用仅具有 MultiTermAware 过滤器的非词干文本字段(对于大多数配置,通常唯一有用的是 LowercaseFilter)。
Wut 当您使用通配符时,通配符可以评估为多个标记/术语(即 multiterm 所指的内容)。由于这对许多过滤器没有意义,因此在存在通配符时不会调用它们 - 例如词干过滤器。但是,当您为内容编制索引时,不存在通配符,并且会调用每个过滤器。
发生的情况是,在您为内容编制索引时会发生词干提取,而不是在您搜索时发生。索引windows
可能会变成window
,但会windows*
尝试查找以实际值开头的任何术语/标记windows
- 但自从windows
变成window
- 即使前缀与索引时的文本相同,也没有匹配项。
推荐阅读
- python - 如何在 LearningRateScheduler 中参考损失分数
- haskell - Haskell:基于属性的高阶函数测试
- html - 从 html5 相机保存图像
- python - 如何修复 AWS Glue 代码以显示来自 AWS S3 的分区表的计数和架构
- python - 覆盖整个列的数据框
- spring - 使用 spring Batch 从命令行运行器读取参数
- jquery - 如何将 select2 中新创建的标签的值更改为数据库中的新 id
- javascript - 如何在基于反应函数的视图中进行 api 调用和填充
- flutter - 如何使下拉按钮创建的列表形状为圆形?
- r - 如何在 R 中突出显示 tmap 上的位置?