Yêu cầu thg 2 3, 2020 7:58 SA 526 0 5
  • 526 0 5
+1

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

Chia sẻ
  • 526 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 thg 2 3, 2020 8:28 SA
Đã được chấp nhận
0

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

Chia sẻ
Đã trả lời thg 2 3, 2020 8:09 SA
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
thg 2 3, 2020 8:14 SA

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

Đã trả lời thg 2 3, 2020 8:20 SA
Chia sẻ
Avatar Tùng Nguyễn @sontung2811
thg 2 3, 2020 8:28 SA

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

Đã trả lời 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"}}
            ]
        }
    }
}
Chia sẻ
Đã trả lời 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')
            "
          }
        }
    }
}
Chia sẻ
Avatar Quang Vo @quangvo
thg 2 11, 2020 3:26 CH
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í