我正在使用elasticsearch从json文件进行过滤和搜索,我是这个技术的新手。所以我有点困惑如何在elasticsearch中编写类似的查询。
select * from table_name where 'field_name' like 'a%'
这是mysql查询。我如何在Elasticsearch中编写此查询?我使用的是Elasticsearch版本0.90.7。
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和正常的查询搜索来更好地设置!
LIKE '%a%'
GET /my_index/table_name/_search { "query": { "match_phrase": { "field_name": "a" } } }
如果您正在阅读这篇文章,想知道如何类似地查询ES以实现按类型搜索,我建议您阅读edge-ngrams,它与Map的正确使用有关,具体取决于您要尝试做的事情=)
ibps3vxo2#
GET /indexName/table_name/_search { "query": { "match_phrase": { "field_name": "your partial text" } } }
您可以使用"type" : "phrase_prefix"作为前缀或后缀来修复您在Java代码中搜索的相同内容:
"type" : "phrase_prefix"
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
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*" } } ] } } }
4dbbbstv4#
编写自定义bool查询对我很有用
@Query("{\"bool\":{\"should\":[{\"query_string\":{\"fields\":[\"field_name\"],\"query\":\"?0*\"}}]}}")
4条答案
按热度按时间5jvtdoz21#
如果可能的话,我强烈建议更新你的ElasticSearch版本,自从0.9.x以来已经有了很大的变化。
这个问题还不够具体,因为ElasticSearch有很多方法可以实现这个功能,并且它们在总体目标上略有不同。如果您希望完全复制SQL查询,那么在本例中使用通配符查询或前缀查询。
使用wildcard查询:
注意:使用通配符搜索时要小心,因为速度很慢。请避免在字符串的开头使用通配符。
或Prefix query
或者partial matching:
注:不要盲目使用部分匹配,虽然有其使用的角落情况,正确使用分析仪几乎总是更好的。
同样,这个确切的查询将等效于
LIKE '%a%'
,这同样可以通过正确使用Map和正常的查询搜索来更好地设置!如果您正在阅读这篇文章,想知道如何类似地查询ES以实现按类型搜索,我建议您阅读edge-ngrams,它与Map的正确使用有关,具体取决于您要尝试做的事情=)
ibps3vxo2#
您可以使用
"type" : "phrase_prefix"
作为前缀或后缀来修复您在Java代码中搜索的相同内容:提供了“and filter”示例,以便您可以根据需要添加额外的过滤器。请查看以下内容以了解更多详细信息:
https://www.elastic.co/guide/en/elasticsearch/guide/current/slop.html
gcuhipw93#
下面是我写的查询,类似于
请注意此处的表=文档
GET/POST均被接受
4dbbbstv4#
编写自定义bool查询对我很有用