gpt4 book ai didi

ruby-on-rails - Searchkick - 尾随特殊字符

转载 作者:行者123 更新时间:2023-11-29 02:49:52 25 4
gpt4 key购买 nike

我正在使用 Searchkich on Rails 5 应用程序。

在模型 Part 的搜索数据中,我有包含点 (.) 和连字符 (-) 的字符串字段。我想在查询字符串中使用点和连字符对这些字段进行文字搜索。我正在使用 word_start 匹配。

当我的查询字符串如下所示时:66.6 它工作正常(它找到查询字段以 66.6 开头的所有记录)。

但是,如果点(或其他特殊字符)尾随(即 66.66- 或什至 66.---.-.- --) 它的行为就像查询字符串只是 66。似乎在修剪“正常”字符(字母和数字)之后的任何内容。

我的搜索是这样的:

Part.search "66.", fields: [:catalogue_number], misspellings: false, match: :word_start

可能的解决方案是什么?

编辑:

好吧,我把它分解了,看起来点和连字符是两个不同的问题。

  1. 查询字符串中的点的行为似乎如上所述 - 如果点后跟任何“正常”字符搜索按预期工作。然而尾随的点似乎被忽略了。
  2. 查询字符串中间的连字符的行为类似于空格 - 它们将查询字符串分成不同的字符串(之后与运算符 连接)。尾随的连字符似乎被忽略了(如点)。

我需要的是点和连字符在查询字符串中的任何位置都按字面意思表现。

最佳答案

searchkick 的 word_start 分析器使用这个 ES 配置(source here)

searchkick_word_start_index: {
type: "custom",
tokenizer: "standard",
filter: ["lowercase", "asciifolding", "searchkick_edge_ngram"]
}

它使用标准标记器在连字符和点上拆分字符串(标准标记器使用其他规则,但与您的情况无关)(doc here)

您应该尝试使用此配置的 searchkick 的 text_start 匹配

searchkick_text_start_index: {
type: "custom",
tokenizer: "keyword",
filter: ["lowercase", "asciifolding", "searchkick_edge_ngram"]
}

Elastic 关键字分词器将保留“.”和“-”并且应该适用于您的用例。

注意:A 认为 66.6 上的工作匹配是侥幸,因为标准分析器也会去除“。”

关于ruby-on-rails - Searchkick - 尾随特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41692517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com