我在Rails 5 app上使用Searchkich。
在我的模型Part
的search_data中,我的字符串字段包含点(.
)和连字符(-
)。我想在查询字符串中使用点和连字符对这些字段进行文字搜索。我正在使用word_start
匹配。
当我的查询字符串看起来像这样:66.6
它工作正常(它找到所有带有66.6
开头查询字段的记录。)
但是,如果点(或其他特殊字符)在尾随(即66.
或66-
或甚至66.---.-.---
),则其行为类似于查询字符串66
。看起来好像"正常"正在修剪字符(字母和数字)。
我的搜索结果如下:
Part.search "66.", fields: [:catalogue_number], misspellings: false, match: :word_start
可能的解决办法是什么?
修改
好吧,我把它分解了,点和连字符似乎是两个不同的问题。
and
连接)。尾随连字符似乎被忽略(如点)。我需要的是点和连字符在字面上表现在查询字符串中的任何位置。
答案 0 :(得分:4)
searchkick的word_start分析器使用此ES配置(source here)
searchkick_word_start_index: {
type: "custom",
tokenizer: "standard",
filter: ["lowercase", "asciifolding", "searchkick_edge_ngram"]
}
它使用标准令牌生成器在连字符和点上分割字符串(标准令牌生成器使用其他规则,但与您的情况无关)(doc here)
您应该尝试使用这种配置的搜索text_start
匹配项
searchkick_text_start_index: {
type: "custom",
tokenizer: "keyword",
filter: ["lowercase", "asciifolding", "searchkick_edge_ngram"]
}
Elastic关键字标记生成器将保留“。”和“-”,并且应适合您的用例。
NB:有人认为66.6
上的有效匹配是a幸的,因为标准分析器还会去除“。”。