我需要根据下面的SQL语句弹性搜索查询的WHERE子句
SELECT * FROM documents
WHERE (doc_name like "%test%" OR doc_type like "%test%" OR doc_desc like "%test%) AND
user_id = 1 AND doc_category = "Utilities"
我需要根据下面的SQL语句弹性搜索查询的WHERE子句
SELECT * FROM documents
WHERE (doc_name like "%test%" OR doc_type like "%test%" OR doc_desc like "%test%) AND
user_id = 1 AND doc_category = "Utilities"
这取决于你的映射,但你可以开始与像这样的工作弹性搜索查询:
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"user_id": 1
}
},
{
"term": {
"doc_category": "Utilities"
}
}
]
}
},
"query": {
"multi_match": {
"query": "test",
"fields": ["doc_name", "doc_type", "doc_desc"]
}
}
}
}
添加到由jbasko给出了答案:在elsaticsearch非常依赖于你的文档字段映射做LIKE查询。例如,如果你想要的LIKE '%test%'
在elasticsearch相当于你需要使用NGRAM分词吧:
{
"settings": {
"analysis": {
"analyzer": {
"some_analyzer_name": {
"tokenizer": "some_tokenizer_name"
}
},
"tokenizer": {
"some_tokenizer_name": {
"type": "ngram",
"min_gram": <minimum number of characters>,
"max_gram": <maximum number of characters>,
"token_chars": [
"letter",
"digit"
]
}
}
}
...
,并在田地里的映射,使用分析:
"mapping":{
...
"doc_type" : {
"type" :"string",
"analyzer" : "some_analyzer_name"
},
...
"doc_type" : {
"type" :"string",
"analyzer" : "some_analyzer_name"
},
...
}
有关ngram的简短说明,此标记器将字段doc_type
中的字符串分隔为具有您在set中定义的字符量的小连续字符串吊环。
即具有
min_gram : 1
max_gram : 3
在模式为 “abcd” 一个的ngram。 'a','ab','abc','b','bc','bcd','c','cd','c'。这个术语将被elasticsearch用于使用具有反向索引的匹配(或多重匹配)查询来找到正确的文档。
如需进一步阅读,你可以搜索:测绘,NGRAM分词和termvectors在elasticsearch维基。
感谢分享。但是我没有从中得到正确的结果。你能帮我解决如何添加LIKE条件。布尔查询不能解决我的问题。 –