elasticsearch 完成建议器未按预期工作,elasticsearch,autocomplete,elasticsearch,Autocomplete" /> elasticsearch 完成建议器未按预期工作,elasticsearch,autocomplete,elasticsearch,Autocomplete" />

elasticsearch 完成建议器未按预期工作

elasticsearch 完成建议器未按预期工作,elasticsearch,autocomplete,elasticsearch,Autocomplete,} ` 上述映射存储在弹性搜索中 后索引/测试 { “主机名”:“testing-01”, “建议”:[{“输入”:“测试-01”}] } 后索引/测试 { “主机名”:“testing-02”, “建议”:[{“输入”:“测试-02”}] } 后索引/测试 { “主机名”:“w1-TETTING-01”, “建议”:[{“输入”:“w1-TETTING-01”}] } 后索引/测试 { “主机名”:“w3-testing-01”, “建议”:[{“输入”:“w3-testing-0

} `

上述映射存储在弹性搜索中


后索引/测试
{
“主机名”:“testing-01”,
“建议”:[{“输入”:“测试-01”}]
}

后索引/测试
{
“主机名”:“testing-02”,
“建议”:[{“输入”:“测试-02”}]
}

后索引/测试
{
“主机名”:“w1-TETTING-01”,
“建议”:[{“输入”:“w1-TETTING-01”}]
}
后索引/测试 { “主机名”:“w3-testing-01”, “建议”:[{“输入”:“w3-testing-01”}] } ` 当有30个文件的主机名以w1开头,主机名为w3时,当搜索术语“w3”时,我首先得到所有w1的建议,然后是w3。 建议查询

{
"settings": {
    "analysis": {
        "filter": {
            "autocomplete_filter": {
                "type": "edgeNGram",
                "min_gram": 1,
                "max_gram": 20
            }
        },
        "analyzer": {
            "autocomplete": {
                "type": "custom",
                "tokenizer": "whitespace",
                "filter": [
                    "lowercase",
                    "autocomplete_filter"
                ]
            }
        }
    }
},
"mappings": {
    "test": {
        "properties": {
            "suggest": {
                "type": "completion",
                "analyzer": "autocomplete"
            },
            "hostname": {
                "type": "text"
            }
        }
    }
}
}

尝试了不同的分析器,同样的问题。
有人能引导吗?

这是一个常见的陷阱。这是因为
min\u ngram
是1,因此
w1-testing-01
w3-testing-01
都将生成令牌
w
。由于您只指定了
analyzer
autocomplete
分析器也将在搜索时启动,因此对
w3
的搜索建议也将生成令牌
w
,因此为什么
w1-testing-01
w3-testing-01
都匹配

解决方案是在
建议
字段中添加
搜索分析器
,以便在搜索时不使用
自动完成
分析器(您可以使用
标准
关键字
或任何对您的用例有意义的分析器),但只能在索引时使用

{
"query": {
    "_source": {
        "include": [
            "text"
        ]
    },
    "suggest": {
        "server-suggest": {
            "text": "w1",
            "completion": {
                "field": "suggest",
                "size": 10
            }
        }
    }
}
“映射”:{
“测试”:{
“财产”:{
“建议”:{
“类型”:“完成”,
“分析器”:“自动完成”,

“搜索引擎分析器”:“标准”如果有30个文档以w1和w3开头,结果仍然以w1开头。我们需要包括hiphens在内的建议。标准分析器将不包括hiphens。你有什么建议吗?公平地说,
标准
分析器丢弃连字符,然后使用
关键字
分析器。谢谢你,瓦尔。我将更新地图PINg并重新索引数据。现在工作正常。自动完成分析器的标记器已更改为空白。感谢您,很高兴它提供了帮助!
  "mappings": {
    "test": {
      "properties": {
        "suggest": {
          "type": "completion",
          "analyzer": "autocomplete",
          "search_analyzer": "standard"        <-- add this
        },
        "hostname": {
          "type": "text"
        }
      }
    }
  }