【发布时间】:2016-02-20 19:17:26
【问题描述】:
我猜这个话题的标题已经把你宠坏了:D
我使用 edge_ngram 和 highlight 来构建自动完成搜索。我在查询中添加了模糊性,以允许用户拼错他们的搜索,但它破坏了一点亮点。
当我写 Sport 这就是我得到的:
<em>Spor</em>t
<em>Spor</em>t mécanique
<em>Spor</em>t nautique
我猜是因为它与 ngram 分词器生成的令牌 spor 匹配。
查询:
{
"query": {
"bool": {
"should": [
{
"match": {
"name": {
"query": "sport",
"operator": "and",
"fuzziness": "AUTO"
}
}
},
{
"match_phrase_prefix": {
"name.raw": {
"query": "sport"
}
}
}
]
}
},
"highlight": {
"fields": {
"name": {
"term_vector": "with_positions_offsets"
}
}
}
}
还有映射:
{
"settings": {
"analysis": {
"analyzer": {
"partialAnalyzer": {
"type": "custom",
"tokenizer": "ngram_tokenizer",
"filter": ["asciifolding", "lowercase"]
},
"keywordAnalyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": ["asciifolding", "lowercase"]
},
"searchAnalyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["asciifolding", "lowercase"]
}
},
"tokenizer": {
"ngram_tokenizer": {
"type": "edge_ngram",
"min_gram": "1",
"max_gram": "15",
"token_chars": [ "letter", "digit" ]
}
}
}
},
"mappings": {
"place": {
"properties": {
"name": {
"type": "string",
"index_analyzer": "partialAnalyzer",
"search_analyzer": "searchAnalyzer",
"term_vector": "with_positions_offsets",
"fields": {
"raw": {
"type": "string",
"analyzer": "keywordAnalyzer"
}
}
}
}
}
}
}
我尝试在查询中添加一个没有模糊性的新匹配子句,以尝试匹配关键字before模糊匹配,但它没有任何改变。
'match': {
'name': {
'query': 'sport',
'operator': 'and'
}
知道我该如何处理吗?
问候,拉斐尔
【问题讨论】:
标签: elasticsearch