[英]Like search in Elasticsearch
我正在使用 elasticsearch 從 json 文件中過濾和搜索,我是這項技術的新手。 所以我有點困惑如何在elasticsearch中編寫類似查詢。
select * from table_name where 'field_name' like 'a%'
這是mysql查詢。 如何在 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"
}
}
}
如果您正在閱讀有關以類似查詢類型查詢ES的信息,我建議您閱讀edge-ngrams ,這與根據您要嘗試的操作正確使用映射有關=)
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")));
給定“和過濾器”示例,以便您可以在需要時附加其他過濾器。 檢查此以獲取更多詳細信息:
https://www.elastic.co/guide/zh-CN/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/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*"
}
}
]
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.