什么设置最适合elasticsearch查询查找全字和半字

问题描述 投票:0回答:1

我不知道应该在查询中设置什么。例如,我搜索“大海的东西”。我期望得到像“大海的东西”、“茶的东西”、“海边的东西”这样的结果,但最后一个永远不会出现在结果中。自动、匹配 90%、多重匹配、带有“必须”的查询具有模糊性,这些单词位于一个字段“名称”中。我找不到设置来获得“海边的东西”的结果,也许根本不可能?弹性搜索 7

elasticsearch
1个回答
0
投票

其中一种方法是

dictionary_decompounder
过滤器。您可以在查询中使用单词列表或包含文件中的单词列表

映射

PUT /decompounder
{
    "mappings": {
        "properties": {
            "name": {
                "type": "text",
                "analyzer": "lowercase_english_decompounder_standard_analyzer"
            }
        }
    },
    "settings": {
        "analysis": {
            "analyzer": {
                "lowercase_english_decompounder_standard_analyzer": {
                    "tokenizer": "standard",
                    "filter": [
                        "lowercase",
                        "english_decompounder_filter"
                    ]
                }
            },
            "filter": {
                "english_decompounder_filter": {
                    "type": "dictionary_decompounder",
                    "word_list": [
                        "some",
                        "thing",
                        "sea",
                        "side"
                    ]
                }
            }
        }
    }
}

文件

PUT /decompounder/_bulk
{"create":{"_id":1}}
{"name":"something sea"}
{"create":{"_id":2}}
{"name":"something tea"}
{"create":{"_id":3}}
{"name":"something seaside"}

使用您的参数查询

GET /decompounder/_search?filter_path=hits.hits
{
    "query": {
        "multi_match" : {
            "query": "some sea",
            "analyzer": "lowercase_english_decompounder_standard_analyzer", 
            "fields": ["name"],
            "fuzziness": "auto",
            "minimum_should_match": "90%"
        }
    }
}

回应

{
    "hits" : {
        "hits" : [
            {
                "_index" : "decompounder",
                "_type" : "_doc",
                "_id" : "1",
                "_score" : 0.7876643,
                "_source" : {
                    "name" : "something sea"
                }
            },
            {
                "_index" : "decompounder",
                "_type" : "_doc",
                "_id" : "3",
                "_score" : 0.7876643,
                "_source" : {
                    "name" : "something seaside"
                }
            },
            {
                "_index" : "decompounder",
                "_type" : "_doc",
                "_id" : "2",
                "_score" : 0.5831994,
                "_source" : {
                    "name" : "something tea"
                }
            }
        ]
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.