【发布时间】:2016-03-24 15:09:50
【问题描述】:
我在查询“ford”是否在数据库中时遇到问题,我搜索“fordddddddd”它会返回匹配项。我有用于子部分匹配的 ngram,用于像 'fo'、for'、ford' 这样的查询,但 'fordddddd' 不应该匹配。可能是什么问题?以下是我的设置、映射和查询。
设置:
settings: {
number_of_shards: 1,
analysis: {
filter: {
ngram_filter: {
type: 'edge_ngram',
min_gram: 2,
max_gram: 15
}
},
analyzer: {
ngram_analyzer: {
type: 'custom',
tokenizer: 'standard',
filter: [
'lowercase',
'ngram_filter'
]
}
}
}
}
映射:
mappings: [
{
name: 'car',
_all: {
type: 'string',
analyzer: 'ngram_analyzer'
},
properties: {
description: {
properties: {
name: {
type: 'string',
include_in_all: true,
term_vector: 'yes',
analyzer: 'ngram_analyzer'
},
model: {
type: 'string',
include_in_all: true,
term_vector: 'yes',
analyzer: 'ngram_analyzer'
}
}
}
}
}
]
查询:
GET car/_search
{
"query": {
"match": {
"_all": {
"query": "Forddddddd"
}
}
}
}
【问题讨论】:
标签: search elasticsearch match matching n-gram