Asked Feb 3rd, 7:58 AM 173 0 5
  • 173 0 5
+1

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

Share
  • 173 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 Feb 3rd, 8:28 AM
Accepted
0

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

Share
Answered Feb 3rd, 8:09 AM
0
"query" : {
        "constant_score" : {
            "filter" : {
                "term": {
                        "firstName": "nguyen"
                }
            }
        }
    }

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

Share
Tùng Nguyễn @sontung2811
Feb 3rd, 8:14 AM

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

0
| Reply
Share
Answered Feb 3rd, 8:20 AM
Share
Tùng Nguyễn @sontung2811
Feb 3rd, 8:28 AM

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

0
| Reply
Share
Answered Feb 4th, 1:08 AM
0

Try this, seems it worked

GET index/_search
{
    "query" : {
        "bool" : {
            "should" : [
                {"terms" : {"firstName": "Nguyen"}},
                {"terms" : {"lastName": "Son Tung"}}
            ]
        }
    }
}
Share
Answered Feb 4th, 3:08 AM
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
Quang Vo @quangvo
Feb 11th, 3:26 PM
0
| Reply
Share