喜欢 Elasticsearch 中的搜索

新手上路,请多包涵

我正在使用 elasticsearch 从 json 文件中过滤和搜索,我是这项技术的新手。所以我有点困惑如何在 elasticsearch 中编写类似查询。

 select * from table_name where 'field_name' like 'a%'

这是 mysql 查询。我如何在 Elasticsearch 中编写此查询?我正在使用 elasticsearch 版本 0.90.7。

原文由 Dixit Sourav 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 429
2 个回答

如果可能,我强烈建议更新您的 ElasticSearch 版本,自 0.9.x 以来已经发生了重大变化。

这个问题不够具体,因为 ElasticSearch 可以通过多种方式实现此功能,并且它们在您的总体目标上略有不同。如果您希望准确复制该 SQL 查询,那么在本例中使用通配符查询或前缀查询。

使用 通配符 查询:

注意:小心使用通配符搜索,它们很慢。避免在字符串的开头使用通配符。

 GET /my_index/table_name/_search
{
    "query": {
        "wildcard": {
            "field_name": "a*"
        }
    }
}

或者 前缀查询

GET /my_index/table_name/_search
{
    "query": {
        "prefix": {
            "field_name": "a"
        }
    }
}

部分匹配

注意: 不要 盲目地使用部分匹配,虽然它的使用存在极端情况,但正确使用分析器几乎总是更好。

此外,这个确切的查询将等同于 LIKE '%a%' ,同样,可以通过正确使用映射和正常的查询搜索来更好地设置!

 GET /my_index/table_name/_search
{
    "query": {
        "match_phrase": {
            "field_name": "a"
        }
    }
}

如果您正在阅读这篇关于查询 ES 以类似方式搜索类型的文章,我建议您阅读 edge-ngrams ,它与正确使用映射有关,具体取决于您尝试做什么 =)

原文由 Daniel Hoffmann-Mitscherling 发布,翻译遵循 CC BY-SA 3.0 许可协议

GET /indexName/table_name/_search
{
    "query": {
        "match_phrase": {
            "field_name": "your partial text"
        }
    }
}

您可以使用 "type" : "phrase_prefix" 作为前缀或后缀来搜索相同的 Java 代码:

 AndFilterBuilder andFilterBuilder = FilterBuilders.andFilter();
 andFilterBuilder.add(FilterBuilders.queryFilter(QueryBuilders.matchPhraseQuery("field_name",
          "your partial text")));

给出“和过滤器”示例,以便您可以根据需要附加额外的过滤器。检查此以获取更多详细信息:

https://www.elastic.co/guide/en/elasticsearch/guide/current/slop.html

原文由 Pranav Mishra 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题