首页 > 解决方案 > 如何在颤动中映射 Elasticsearch match_phrase 查询

问题描述

我正在尝试将弹性搜索添加到我的颤振应用程序中。我正在使用elastic_client来处理连接

如何以颤振格式映射以下查询?

POST /books/_search
{
    "query": {
        "match_phrase": {
            "name" : {
                "query" : "Roberts book",
                "slop": 50
            }
        }
    }
}

关于弹性搜索和颤振的信息很少。

现在我有以下代码可以使用 elastic_client 进行查询。但据我了解,这个包没有实现match_phrase。我需要查询match_phrase。

final searchResult = await client.search(
    index: 'books',
    type: '_doc',
    query: elastic.Query.term('name', ['$searchQuery'.toLowerCase()]),
    source: true);

如果您想了解更多信息,我遵循了本教程。

在@Vlad 和 elastic_client 创建者的帮助

它可能对某人有用,所以完整的解决方案是:

final transport = HttpTransport(url: 'http://myip:9200/');
    final client = elastic.Client(transport);
    final searchResult = await client.search(
      index : 'books',
        type: '_doc',
        query: {
          "match_phrase": {
            "name" : {
              "query" : '$searchQuery'.toLowerCase(),
              "slop": 50,
            },
          },
        });

标签: flutterelasticsearch

解决方案


通过遵循匹配实现源代码,看起来这些方法只是用于创建 JSON 的包装器。因此,基于此,我可以得出,您可以执行以下操作:

final searchResult = await client.search(
    index: 'books',
    type: '_doc',
    query: {
        'match_phrase': {
            'name': {
                'query': '$searchQuery'.toLowerCase(),
                'slop': 50
            }
        },
    };
    source: true);

请注意,我没有使用 Flutter 的经验,这只是我基于源代码的想法。

或者,您可以创建自己的方法来为 Elasticsearch 创建 JSON。


推荐阅读