我 有 一 个 包含 城市 名称 的 索引 。 我 试图 正确 地 给 我 的 条目 打分 , 但是 我 没有 得到 想要 的 结果 。 我 试 着 在 没有 任何 指定 设置 的 情况 下 创建 索引 , 并 使用 了 一 个 edge-n - gram 和 一 个 n - gram 分析 器 。 城市 名称 的 语言 是 德语 , 我 读 的 是 here , 这 应该 是 一 个 很 好 的 分析 器 。 下面 是 我 为 分析 器 尝试 的 设置 :
{
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "1"
},
"analysis": {
"analyzer": {
"e_ngram_token": {
"tokenizer": "edge_ngram_tokenizer"
}
},
"tokenizer": {
"edge_ngram_tokenizer": {
"type": "edge_ngram", // exchanged to ngram the other time
"min_gram": 2,
"max_gram": 10,
"token_chars": [
"letter",
"digit"
]
}
}
}
},
"mappings": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
中 的 每 一 个
下面 是 批量 创建 (/cities/_ bulk ) 的 一些 示例 数据 :
{ "create": { } }
{"name": "Münster"}
{ "create": { } }
{"name": "München"}
{ "create": { } }
{"name": "Bad-Münster Fake 2"}
{ "create": { } }
{"name": "Bad Münster Fake"}
{ "create": { } }
{"name": "Munddort fake"}
{ "create": { } }
{"name": "Stolpmünde"}
{ "create": { } }
{"name": "Swinemünde"}
{ "create": { } }
{"name": "Dortmund"}
{ "create": { } }
{"name": "Müden (Mosel)"}
{ "create": { } }
{"name": "Mannheim"}
{ "create": { } }
{"name": "Marburg"}
{ "create": { } }
{"name": "Magdeburg"}
{ "create": { } }
{"name": "Montreux"}
{ "create": { } }
{"name": "Sankt Moritz"}
格式
因此 , 当 我 运行 如下 查询 时 :
{
"from": 0,
"size": 100,
"query": {
"match": {
"name": {
"query": "mun",
"analyzer": "e_ngram_token",
"fuzziness": "2",
"fuzzy_transpositions": true,
"operator": "or",
"max_expansions": 50,
"boost": 5
}
}
}
}
格式
我 希望 得到 像 " München " , " Münster " 等 这样 的 城市 , 基本 上 每个 城市 都 有 " mun " , 或者 , 因为 模糊 性 , 城市 有 " mün " , " man " , " tan " 等 。 我 得到 的 是 这样 的 :
{
"took": 10,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.0,
"hits": [
{
"_index": "cities",
"_type": "_doc",
"_id": "7jX2ioQBc3BSm-EXMB2V",
"_score": 0.0,
"_source": {
"name": "Bad-Münster Fake 2"
}
}
]
}
}
格式
有人 能 给 我 解释 一下 我 遗漏 了 什么 吗 ? 在 我 的 理解 中 , 标记 是 在 索引 时间 创建 的 , 并且 将 类似 于 ' [ " Mü " , " ün " , " nc " ... " Mün " ] 表示 " München " 。 因为 我 要求 模糊 性 为 2 , 术语 " mun " 应该 与 标记 " mün " 匹配 , 从而 返回 结果 。
多谢 了 !
1条答案
按热度按时间92vpleto1#
您必须在字段中添加分析仪