在 Elasticsearch 中像搜索一样

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

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

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


答案 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,这与正确使用映射有关,具体取决于您尝试执行的操作=)


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

您可以使用前缀或发布修复程序,搜索 Java 代码以查找相同的内容:"type" : "phrase_prefix"

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


推荐