Asked thg 2 3, 2020 7:58 SA 530 0 5
  • 530 0 5
+1

Tìm kiếm chính xác cụm từ trong Elasticsearch

Share
  • 530 0 5

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 ANSWERS


Answered thg 2 3, 2020 8:28 SA
Accepted
0

{ "query": { "bool": { "filter": [ { "match": { "firstName.keyword": "Nguyen" } }, { "match": { "lastName.keyword": "Tung" } } ] } } }

Share
Answered thg 2 3, 2020 8:09 SA
0
"query" : {
        "constant_score" : {
            "filter" : {
                "term": {
                        "firstName": "nguyen"
                }
            }
        }
    }

Bạn thử query như thế này xem

Share
Avatar Tùng Nguyễn @sontung2811
thg 2 3, 2020 8:14 SA

Kết quả vẫn vậy bạn ạ

0
| Reply
Share
Answered thg 2 3, 2020 8:20 SA
Share
Avatar Tùng Nguyễn @sontung2811
thg 2 3, 2020 8:28 SA

Không có trong này bạn ạ 😦

0
| Reply
Share
Answered thg 2 4, 2020 1:08 SA
0

Try this, seems it worked

GET index/_search
{
    "query" : {
        "bool" : {
            "should" : [
                {"terms" : {"firstName": "Nguyen"}},
                {"terms" : {"lastName": "Son Tung"}}
            ]
        }
    }
}
Share
Answered thg 2 4, 2020 3:08 SA
0

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')
            "
          }
        }
    }
}
Share
Avatar Quang Vo @quangvo
thg 2 11, 2020 3:26 CH
0
| Reply
Share
Viblo
Let's register a Viblo Account to get more interesting posts.