首页 > 解决方案 > ES 下面的字段如何匹配&在特定情况下不删除令牌?

问题描述

我有下面的映射。

"sub":{"type":"text", "analyzer":"stop_analyzer"}

我有一个查询

{
"_source":["sub"],
"query": {
   "fuzzy" : { "sub" : "Thr" }
}
}

分析仪:

{
    "analysis": {
        "analyzer":{
            "stop_analyzer":{
                "tokenizer":"lowercase",
                "filter":["synonym_graph","stop_el_filter"]
            }
        },
        "filter": {
            "stop_el_filter": {
                "type":       "stop",
                "stopwords":  "_english_"
            },
            "synonym_graph" : {
                    "type" : "synonym_graph",
                    "lenient": true,
                    "synonyms" : [
                        "americas, us, usa, u.s.a, america => america",
                        "americas-us public sector, america ps, ps america, ps usa => ps"
                    ]
                }
        }
    }
}

以下字符串如何匹配:

(USER_TRIGGERED (ALL:MAINT=8hr ARL of Nodes 02-A/B))

分析 API 提供以下标记:

 "token": "user"
 "token": "triggered"
 "token": "all"
 "token": "maint",
 "token": "hr"
 "token": "arl"
 "token": "nodes"
 "token": "b"

为什么Thr要匹配这个文档?当我分析Thr它的结果时thr

是因为模糊删除t匹配hr吗?- 是的,我认为我是对的。

有什么方法可以不将其删除A-A/B在特定情况下不考虑作为停用词[在没有空格时不标记A]?

标签: elasticsearch

解决方案


Thr与您的文档匹配,因为fuzzy查询允许在该字长上保留 1 个字符的距离。因此,fuzzy(Thr)匹配hr令牌。

关于您的第二个问题,A已删除,因为它是英语停用词并且您正在使用stop令牌过滤器。所以如果你删除它,它A也会被索引


推荐阅读