使用特殊字符处理Elasticsearch查询

时间:2019-01-22 10:38:09

标签: ruby-on-rails elasticsearch special-characters searchkick

我在我们的Elasticsearch实现中使用了Searchkick抽象。

这是配置:

  searchkick(
    word_middle: [:name],
    suggest: [:name],
    searchable: [:name],
    synonyms: -> { CSV.read("app/lib/club_and_team_search_synonyms.csv") },
    callbacks: :async,
  )

这是查询

  Searchkick.search(
        query,
        index_name: [Club, Team],
        fields: [:name],
        match: :word_middle,
        operator: "or",
        limit: 50,
        where: { country_id: country_id, hide_in_search: false },
        track: track_search,
 )

好的,所以问题是我想找到以下名称为Saint Jean d Angely的俱乐部

如果我搜索Saint Jean d Angely,它将返回正常值,如果也可以与Saint Jean dAngely一起运行,但得分会降低。

但是,如果我这样搜索:Saint Jean d'Angely得分会非常低,因此许多其他俱乐部的得分也会更高,即使它们看起来差很多-我知道这也与使用n-gram,但仍然很难理解分数如何降低那么多。

word_middle搜索索引在幕后使用ascii_folding,那么处理这种事情的最佳方法是什么?

我应该在执行查询之前删除特殊字符,因为我已经在索引中处理了特殊字符,还是有更好的方法?

0 个答案:

没有答案