【发布时间】:2018-04-30 08:32:46
【问题描述】:
我正在尝试将字符串与字段匹配,并且只想应用模糊性。
例如,使用这些文件:
{ title: "replace oilfilter" }, { title: "replace motoroil" }
以下查询应该只匹配第一个文档:
"Replace oilfilter", "Replace oilsfilter", "Replaze oilfilter"
以下查询应该不匹配任何文档:
"replace", "oilfilter", "motoroil"
到目前为止,我得到的是以下内容:
索引
我正在使用关键字分析器,因此它将(潜在)短语视为单个单词,这样在搜索“替换”时它不匹配文档,但在搜索确切术语时确实找到了文档“更换机油滤清器”。
"mappings": {
"blacklist": {
"properties": {
"title": {
"type": "text",
"analyzer": "keyword"
}
}
}
}
搜索
我尝试了多个查询来搜索文档。我接近了以下查询:
"query": {
"query_string": {
"default_field": "title",
"fuzziness": "3",
"query": query
}
}
结果
使用此查询,结果如下:
> "Replace oilfilter" (exact words)
< doc: { title: "replace oilfilter" }, score: 0.5753..
< doc: { title: "replace motoroil" }, score: 0.2876..
> "Replace iolfilter" (typo)
< doc: { title: "replace oilfilter" }, score: 0.2876..
> "oilfilter" (other term)
< doc: { title: "replace oilfilter" }, score: 0.2876..
问题
结果还不错,但我需要更准确的分数。仅包含简单拼写错误的第二个查询的得分应该比第一个查询中的第二个结果和第三个查询中的唯一结果高得多。
我想要实现的是它将 whole 查询与文档中的 whole 字段匹配,这就是我使用关键字分析器的原因。除此之外,我只想应用一些模糊性。
希望有人能对这个问题有所了解。
谢谢!
【问题讨论】:
标签: elasticsearch