我在我们的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
,那么处理这种事情的最佳方法是什么?
我应该在执行查询之前删除特殊字符,因为我已经在索引中处理了特殊字符,还是有更好的方法?