【问题标题】:Is there a way to exclude words from a query in Searchkick?有没有办法从 Searchkick 中的查询中排除单词?
【发布时间】:2020-01-13 05:01:23
【问题描述】:

我想排除一些用户在搜索结果膨胀时可能输入到搜索栏中的字词。

出于不同的原因,我需要operator: :or,但如果我有一个像“The Beatles”这样的搜索词,它会在整个数据库中搜索“The”和“Beatles”,结果太多了。我想从收到的任何查询中排除“the”,这样就好像用户只搜索了“Beatles”。

也许这不可能。谢谢你的帮助????

我尝试添加exclude: ["the"],但这删除了任何带有“the”一词的结果。

【问题讨论】:

    标签: ruby-on-rails ruby elasticsearch activerecord searchkick


    【解决方案1】:

    你试过了吗:

    "The Beatles".gsub('The ', '')
    

    【讨论】:

    • 我同意这是现在使用 Searchkick 完成此任务的最简单方法。稍微好一点的形式是gsub(/\bthe|other|words\b/i, ""),因此它不区分大小写,支持多个单词,并且可以在查询中出现单词的任何地方工作(不仅仅是在开头)。
    • 感谢您的回答,沙阿。这是一个聪明、干净的解决方案。并感谢 Andrew 添加正则表达式以使其不区分大小写的想法。
    【解决方案2】:

    Elasticsearch 为解决此类问题提供了很好的解决方案 - 分析器。

    在您的情况下,您需要在映射中实现停止分析器。详细信息和文档可以在这里找到:Stop Analyzer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 2015-01-09
      • 2021-07-30
      • 2022-11-21
      • 2020-09-08
      相关资源
      最近更新 更多