喜欢在Elasticsearch中搜索

Dix*_*rav 15 php java elasticsearch elasticsearch-plugin elasticsearch-net

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

select * from table_name where 'field_name' like 'a%'
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ing 29

如果可能的话,我强烈建议更新你的ElasticSearch版本,自0.9.x以来已有重大变化.

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

使用通配符查询:

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

GET /my_index/table_name/_search
{
    "query": {
        "wildcard": {
            "field_name": "a*"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

前缀查询

GET /my_index/table_name/_search
{
    "query": {
        "prefix": {
            "field_name": "a"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

部分匹配:

注意:千万不要盲目使用部分匹配,同时也有极端案例以它的使用,正确的使用分析仪几乎总是更好的.

此精确查询也将相当于LIKE '%a%',通过正确使用映射和普通查询搜索,可以更好地进行设置!

GET /my_index/table_name/_search
{
    "query": {
        "match_phrase": {
            "field_name": "a"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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