我需要根據下面的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條件。布爾查詢不能解決我的問題。 –