首页 > 解决方案 > 使用 elasticsearch 搜索所有世界

问题描述

我不知道如何进行多世界查询。

我遵循指南,但如果不是完全匹配,我不会得到任何结果。

对于这个查询:

"query": {
    "match" : {
        "name" : "GOODYEAR TIRE"
    }
}

我得到:

"hits": {
"total": 2,
"max_score": 10.46396,
"hits": [
{
"_index": "holdings1",
"_type": "searchentity",
"_id": "80809219-88a0-49bc-96b6-183db8a7d056",
"_score": 10.46396,
"_source": {
"guid": "80809219-88a0-49bc-96b6-183db8a7d056",
...
"name": "GOODYEAR TIRE",
"issuer": "GOODYEAR TIRE & RUBBER CO (GT)",
...
}
}

但为此我一无所获:

"query": {
    "match" : {
        "issuer" : "GOODYEAR TIRE"
    }
}

映射:

"searchentity": {
                "properties": {
                      .....
                    "issuer": {
                        "type": "text",
                        "analyzer": "custom"
                    },
                    "name": {
                        "type": "text",
                        "analyzer": "custom"
                    }
                     ......
                }
            }

分析器(c#):

        .Settings(s => s.NumberOfReplicas(1).NumberOfShards(1).Analysis(a => a.Analyzers(an => an.Custom("custom", ca => ca
                        .Tokenizer("keyword")
                        .CharFilters("remove-specials")
                        .Filters("lowercase")
                    )).CharFilters(charFilters => charFilters.PatternReplace("remove-specials", p => p.Pattern("[^0-9a-zA-Z\u0590-\u05fe\x20]+")))

标签: elasticsearch

解决方案


您没有得到结果,因为 GOODYEAR TIRE & RUBBER CO (GT)它不包含GOODYEAR RUBBER短语。

短语意味着它所有的单词必须完全相同且有序。

您应该尝试match_query,它会返回结果。

如果您在构建匹配查询时遇到任何问题,请告诉我。


推荐阅读