喜欢 Elasticsearch 中的搜索
Like search in Elasticsearch
我正在使用 elasticsearch 从 json 文件中过滤和搜索,我是这项技术的新手。所以我有点困惑如何在 elasticsearch 中编写 like 查询。
select * from table_name where 'field_name' like 'a%'
这是mysql查询。我如何在 Elasticsearch 中编写此查询?我正在使用 elasticsearch 版本 0.90.7.
GET /indexName/table_name/_search
{
"query": {
"match_phrase": {
"field_name": "your partial text"
}
}
}
您可以使用 "type" : "phrase_prefix"
作为前缀或 post 修复您的搜索
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
如果可能,我强烈建议更新您的 ElasticSearch 版本,自 0.9.x.
以来已经发生了重大变化
这个问题不够具体,因为 ElasticSearch 可以通过多种方式实现此功能,并且它们在您的总体目标上略有不同。如果您希望准确复制该 SQL 查询,那么在本例中使用通配符查询或前缀查询。
使用 wildcard 查询:
注意:小心使用通配符搜索,它们很慢。避免在字符串的开头使用通配符。
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,这与根据您尝试执行的操作正确使用映射有关=)
下面是我写的查询,类似于
SELECT * FROM TABLE WHERE api='payment' AND api_v='v1' AND status='200' AND response LIKE '%expired%' AND response LIKE '%token%'
请注意 table = 此处的文档
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*"
}
}
]
}
}
}
我正在使用 elasticsearch 从 json 文件中过滤和搜索,我是这项技术的新手。所以我有点困惑如何在 elasticsearch 中编写 like 查询。
select * from table_name where 'field_name' like 'a%'
这是mysql查询。我如何在 Elasticsearch 中编写此查询?我正在使用 elasticsearch 版本 0.90.7.
GET /indexName/table_name/_search
{
"query": {
"match_phrase": {
"field_name": "your partial text"
}
}
}
您可以使用 "type" : "phrase_prefix"
作为前缀或 post 修复您的搜索
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
如果可能,我强烈建议更新您的 ElasticSearch 版本,自 0.9.x.
以来已经发生了重大变化这个问题不够具体,因为 ElasticSearch 可以通过多种方式实现此功能,并且它们在您的总体目标上略有不同。如果您希望准确复制该 SQL 查询,那么在本例中使用通配符查询或前缀查询。
使用 wildcard 查询:
注意:小心使用通配符搜索,它们很慢。避免在字符串的开头使用通配符。
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,这与根据您尝试执行的操作正确使用映射有关=)
下面是我写的查询,类似于
SELECT * FROM TABLE WHERE api='payment' AND api_v='v1' AND status='200' AND response LIKE '%expired%' AND response LIKE '%token%'
请注意 table = 此处的文档
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*"
}
}
]
}
}
}