Tìm kiếm chính xác cụm từ trong Elasticsearch
Chào mọi người, làm thế nào để tìm kiếm chính xác một cụm từ trong Elasticsearch nhỉ?? (Mình đã thử chuyển firstName và lastName sang keyword nhưng không được). Dưới đây là query của mình:
{
"query": {
"bool": {
"filter": [
{
"term": {
"firstName": "nguyen"
}
},
{
"term": {
"lastName": "tung"
}
}
]
}
}
}
Và đây là kết quả trả về:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 0.0,
"hits": [
{
"_index": "do_booking",
"_type": "info",
"_id": "IRRgCXABLT3PqAr4nxZK",
"_score": 0.0,
"_source": {
"firstName": "Nguyen",
"lastName": "Tung"
}
},
{
"_index": "do_booking",
"_type": "info",
"_id": "IhRgCXABLT3PqAr4uRaV",
"_score": 0.0,
"_source": {
"firstName": "Nguyen",
"lastName": "Son Tung"
}
}
]
}
}
Mình chỉ muốn trả về bản ghi có source "firstName": "Nguyen", "lastName": "Tung" thôi.
5 CÂU TRẢ LỜI
{ "query": { "bool": { "filter": [ { "match": { "firstName.keyword": "Nguyen" } }, { "match": { "lastName.keyword": "Tung" } } ] } } }
"query" : {
"constant_score" : {
"filter" : {
"term": {
"firstName": "nguyen"
}
}
}
}
Bạn thử query như thế này xem
Kết quả vẫn vậy bạn ạ
Không có trong này bạn ạ
Try this, seems it worked
GET index/_search
{
"query" : {
"bool" : {
"should" : [
{"terms" : {"firstName": "Nguyen"}},
{"terms" : {"lastName": "Son Tung"}}
]
}
}
}
b tham khảo dùng script trong ES nhé, mặc định ES sẽ analytic (phân tích) keywords ra để search nên k dùng query ES thông thường ở đây
{
"query": {
script: {
script: {
lang: "painless",
source: "
doc['firstName'].value.equals('Nguyen') &&
doc['lastName'].value.equals('Tung')
"
}
}
}
}
bạn thử dùng match_phrase xem dk ko nhé https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase.html