我正在使用elasticsearch从JSON文件中进行过滤和搜索,但我是这项技术的新手。因此,我有点困惑如何在elasticsearch中编写类似的查询。
select * from table_name where 'field_name' like 'a%'
这是MySQL查询。我该如何在Elasticsearch中编写此查询?我使用的是Elasticsearch版本0.90.7。
我正在使用elasticsearch从JSON文件中进行过滤和搜索,但我是这项技术的新手。因此,我有点困惑如何在elasticsearch中编写类似的查询。
select * from table_name where 'field_name' like 'a%'
这是MySQL查询。我该如何在Elasticsearch中编写此查询?我使用的是Elasticsearch版本0.90.7。
如可能,我强烈建议更新您的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"
}
}
}
如果你正在阅读这篇文章,想了解如何在搜索时进行类似 search-as-you-type 的查询,我建议你阅读关于 edge-ngrams 的内容,这与正确使用映射相关,取决于你尝试做什么 =)
message : "Unable to query openstack for*" and message : "*retry"
来获取 Unable to query openstack for*retry
。 - xiaojueguanGET /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")));
https://www.elastic.co/guide/en/elasticsearch/guide/current/slop.html
SELECT * FROM TABLE WHERE api='payment' AND api_v='v1' AND status='200' AND response LIKE '%expired%' AND response LIKE '%token%'
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*"
}
}
]
}
}
}
编写自定义的布尔查询对我很有帮助
@Query("{\"bool\":{\"should\":[{\"query_string\":{\"fields\":[\"field_name\"],\"query\":\"?0*\"}}]}}")