您可以匹配n元语法/带格查询吗? (ES 2.3)

时间:2019-04-23 16:58:22

标签: elasticsearch elasticsearch-query

我要完成的工作是使用ElasticSearch来执行类似于给定的返回地址。假设有人输入“ 123 Main St.”但数据中包含“ 123 MAIN STREET SOUTH”,它将作为部分匹配结果返回。

因此,我在ElasticSearch的街道字段上进行了以下设置:

{
    "mappings": {
        "addresses": {
            "properties": {
                "street1": {
                    "type": "string",
                    "analyzer": "street_analyzer"
                }
            }
        }
    },
    "settings": {
        "index": {
            "analysis": {
                "analyzer" : {
                    "street_analyzer" : {
                        "type": "custom",
                        "tokenizer": "standard",
                        "filter": ["standard", "lowercase", "street_filter_synonym", "street_filter_stop", "stop", "street_filter_shingle"]
                    }
                },
                "filter": {
                    "street_filter_synonym": {
                        "type" : "synonym",
                        "ignore_case": true,
                        "synonyms" : []
                    },
                    "street_filter_stop" : { 
                        "type" : "stop",
                        "ignore_case": true,
                        "stopwords": []
                    },
                    "street_filter_shingle": {
                        "type" : "shingle",
                        "output_unigrams" : true,
                        "min_shingle_size" : 2,
                        "max_shingle_size" : 5
                    }
                }
            }
        }
    }
}

我正在尝试像这样在该字段上进行搜索:

{
    "query": {
        "match": {
            "street1": {
                "query": "436 5TH AVE",
                "fuzziness": "AUTO",
                "operator": "and",
                "analyzer":"street_analyzer"
            }
        }
    }
}

我找到了比赛,但如果我对“ 436 5TH AVE SOUTH”进行相同的搜索,则不会。我认为这种重叠将使它与部分匹配,因为它既标记了索引字段又查询了字符串,但这似乎并非如此。

一个人怎么能接受单个输入字符串并匹配带瓦片的版本,而忽略那些不存在的字段呢?

0 个答案:

没有答案