Tôi đã có ba tài liệu với một lĩnh vực "userName":ElasticSearch một edgeNGram cho autocomplete typeahead, là search_analyzer tôi bị bỏ qua
- 'briandilley'
- 'briangumble'
- 'briangriffen'
khi tôi tìm kiếm 'brian' tôi nhận được tất cả ba trở lại như mong đợi, nhưng khi tôi tìm kiếm 'briandilley' tôi vẫn nhận được tất cả ba trở lại. API phân tích cho tôi biết rằng nó đang sử dụng bộ lọc ngram trên chuỗi tìm kiếm của tôi, nhưng tôi không chắc chắn tại sao. đây là thiết lập của tôi:
thiết lập chỉ mục:
{
"analysis": {
"analyzer": {
"username_index": {
"tokenizer": "keyword",
"filter": ["lowercase", "username_ngram"]
},
"username_search": {
"tokenizer": "keyword",
"filter": ["lowercase"]
}
},
"filter": {
"username_ngram": {
"type": "edgeNGram",
"side" : "front",
"min_gram": 1,
"max_gram": 15
}
}
}
}
lập bản đồ:
{
"user_follow": {
"properties": {
"targetId": { "type": "string", "store": true },
"followerId": { "type": "string", "store": true },
"dateUpdated": { "type": "date", "store": true },
"userName": {
"type": "multi_field",
"fields": {
"userName": {
"type": "string",
"index": "not_analyzed"
},
"autocomplete": {
"type": "string",
"index_analyzer": "username_index",
"search_analyzer": "username_search"
}
}
}
}
}
}
tìm kiếm:
{
"from" : 0,
"size" : 50,
"query" : {
"bool" : {
"must" : [ {
"field" : {
"targetId" : "51888c1b04a6a214e26a4009"
}
}, {
"match" : {
"userName.autocomplete" : {
"query" : "brian",
"type" : "boolean"
}
}
} ]
}
},
"fields" : "followerId"
}
tôi đã thử matchQuery, matchPhraseQuery, textQuery và termQuery (java DSL api) và tôi nhận được kết quả tương tự mỗi lần.
tôi đang làm điều này trong một thử nghiệm đơn vị java - vì vậy đó là lý do tại sao không có bất kỳ báo cáo CURL (sử dụng trong ứng dụng bộ nhớ). –
Vâng, rất có thể bạn đang làm điều gì đó sai ở đó. Bằng cách tái tạo nó như curl, bạn có thể xem liệu bạn có thể tạo lại vấn đề hay không. Nếu bạn không thể, thì vấn đề nằm trong mã Java của bạn. (Tôi có nghĩa là sản xuất các câu lệnh curl bằng tay, mà bạn có thể làm) – DrTech
Bạn đã đúng - tôi đã lập chỉ mục tên người dùng của mục tiêu thay vì tên người dùng của người theo dõi. Về cơ bản chỉ mục xấu về phía tôi. Tôi đã đánh dấu câu trả lời của bạn là câu trả lời đúng vì bạn đã giúp đưa tôi đến vấn đề thực sự là gì. –