喜欢在Elasticsearch中搜索

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

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

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

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

这个问题不够具体,因为ElasticSearch可以通过多种方式实现此function,并且它们与您的总体目标略有不同。 如果您希望完全复制该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 ,这与正确使用映射有关,具体取决于您尝试做什么=)

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

您可以使用"type" : "phrase_prefix"来为前缀或"type" : "phrase_prefix"修复您搜索相同的Java代码:

 AndFilterBuilder andFilterBuilder = FilterBuilders.andFilter(); andFilterBuilder.add(FilterBuilders.queryFilter(QueryBuilders.matchPhraseQuery("field_name", "your partial text"))); 

给出’和’过滤’示例,以便您可以根据需要添加额外的filter。 检查这个更多细节:

https://www.elastic.co/guide/en/elasticsearch/guide/current/slop.html