Yêu cầu Feb 3rd, 2020 7:58 a.m. 577 0 5
  • 577 0 5
+1

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

Chia sẻ
  • 577 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 CÂU TRẢ LỜI


Đã trả lời Feb 3rd, 2020 8:28 a.m.
Đã được chấp nhận
0

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

Chia sẻ
Đã trả lời Feb 3rd, 2020 8:09 a.m.
0
"query" : {
        "constant_score" : {
            "filter" : {
                "term": {
                        "firstName": "nguyen"
                }
            }
        }
    }

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

Chia sẻ
Avatar Tùng Nguyễn @sontung2811
Feb 3rd, 2020 8:14 a.m.

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

Đã trả lời Feb 3rd, 2020 8:20 a.m.
Chia sẻ
Avatar Tùng Nguyễn @sontung2811
Feb 3rd, 2020 8:28 a.m.

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

Đã trả lời Feb 4th, 2020 1:08 a.m.
0

Try this, seems it worked

GET index/_search
{
    "query" : {
        "bool" : {
            "should" : [
                {"terms" : {"firstName": "Nguyen"}},
                {"terms" : {"lastName": "Son Tung"}}
            ]
        }
    }
}
Chia sẻ
Đã trả lời Feb 4th, 2020 3:08 a.m.
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')
            "
          }
        }
    }
}
Chia sẻ
Avatar Quang Vo @quangvo
Feb 11th, 2020 3:26 p.m.
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí