在Elasticsearch中进行喜欢搜索

sh7euo9m  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(4)|浏览(174)

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

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

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

5jvtdoz2

5jvtdoz21#

如果可能的话,我强烈建议更新你的ElasticSearch版本,自从0.9.x以来已经有了很大的变化。
这个问题还不够具体,因为ElasticSearch有很多方法可以实现这个功能,并且它们在总体目标上略有不同。如果您希望完全复制SQL查询,那么在本例中使用通配符查询或前缀查询。
使用wildcard查询:
注意:使用通配符搜索时要小心,因为速度很慢。请避免在字符串的开头使用通配符。

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

Prefix query

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

或者partial matching
注:不要盲目使用部分匹配,虽然有其使用的角落情况,正确使用分析仪几乎总是更好的。
同样,这个确切的查询将等效于LIKE '%a%',这同样可以通过正确使用Map和正常的查询搜索来更好地设置!

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

如果您正在阅读这篇文章,想知道如何类似地查询ES以实现按类型搜索,我建议您阅读edge-ngrams,它与Map的正确使用有关,具体取决于您要尝试做的事情=)

ibps3vxo

ibps3vxo2#

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")));

提供了“and filter”示例,以便您可以根据需要添加额外的过滤器。请查看以下内容以了解更多详细信息:
https://www.elastic.co/guide/en/elasticsearch/guide/current/slop.html

gcuhipw9

gcuhipw93#

下面是我写的查询,类似于

SELECT * FROM TABLE WHERE api='payment' AND api_v='v1' AND status='200' AND response LIKE '%expired%' AND response LIKE '%token%'

请注意此处的表=文档
GET/POST均被接受

GET /transactions-d-2021.06.24/_search
{
   "query":{
      "bool":{
         "must":[
            {
               "match":{
                  "api":"payment"
               }
            },
            {
               "match":{
                  "api_v":"v1"
               }
            },
            {
               "match":{
                  "status":"200"
               }
            },
            {
               "wildcard":{
                  "response":"*expired*"
               }
            },
            {
               "wildcard":{
                  "response":"*token*"
               }
            }
         ]
      }
   }
}
4dbbbstv

4dbbbstv4#

编写自定义bool查询对我很有用

@Query("{\"bool\":{\"should\":[{\"query_string\":{\"fields\":[\"field_name\"],\"query\":\"?0*\"}}]}}")

相关问题