一尘不染

喜欢在Elasticsearch中搜索

elasticsearch

我正在使用elasticsearch从json文件过滤和搜索,并且我是这项技术的新手。所以我有点困惑如何在elasticsearch中写像查询一样的东西。

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

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


阅读 225

收藏
2020-06-22

共1个答案

一尘不染

如果可能的话,我强烈建议您更新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
,这与根据您要尝试的操作正确使用映射有关=)

2020-06-22