Chúng tôi đang gặp một số khó khăn trong việc tìm ra cách quản lý tốt nhất các trường được mã hóa và không được kiểm soát của chúng tôi cho cả tìm kiếm và sắp xếp. mục tiêu của chúng tôi là khá đơn giản:Áp dụng mẫu động cho nhiều loại - để quản lý mã thông báo để phân loại
- Hỗ trợ từ phần tìm kiếm
- Hỗ trợ phân loại trên tất cả mọi lĩnh vực
- lập bản đồ của chúng tôi phải năng động, khách hàng thêm lĩnh vực mới khi chạy.
Chúng tôi có thể thực hiện việc này bằng mẫu động. Chúng tôi lưu trữ các chuỗi bằng cách sử dụng trình mã thông báo mặc định, trình mã thông báo tùy chỉnh, ngram và trình kiểm duyệt không được kiểm duyệt. Các bản đồ:
curl -XPUT 'http://testServer:9200/test/' -d '{
"settings": {
"analysis": {
"analyzer": {
"my_ngram_analyzer": {
"tokenizer": "my_ngram_tokenizer",
"filter": [
"lowercase"
],
"type" : "custom"
},
"default_search": {
"tokenizer" : "keyword",
"filter" : [
"lowercase"
]
}
},
"tokenizer": {
"my_ngram_tokenizer": {
"type": "nGram",
"min_gram": "3",
"max_gram": "100",
"token_chars": []
}
}
}
},
"mappings": {
"TestObject": {
"dynamic_templates": [
{
"metadata_template": {
"match_mapping_type": "string",
"path_match": "*",
"mapping": {
"type": "multi_field",
"fields": {
"ngram": {
"type": "{dynamic_type}",
"index": "analyzed",
"index_analyzer": "my_ngram_analyzer",
"search_analyzer" : "default_search"
},
"{name}": {
"type": "{dynamic_type}",
"index": "analyzed",
"index_analyzer" : "standard",
"search_analyzer" : "default_search"
},
"sortable": {
"type": "{dynamic_type}",
"index": "analyzed",
"analyzer" : "default_search"
}
}
}
}
}
]
}
}
}'
Chúng tôi thực sự chỉ giữ lại những lĩnh vực được phân tích xung quanh để phân loại và kết hợp chính xác (. Chúng tôi thậm chí gọi nó, 'sắp xếp được') Cấu hình này làm cho nó dễ dàng cho chúng tôi để có được tìm kiếm từ một phần, nếu truy vấn là truy vấn "chứa" - chúng tôi nối ".ngram" vào mục tiêu truy vấn. Vấn đề mà chúng tôi đang gặp phải là quyết định thời điểm sử dụng hậu tố ".sortable". Nếu chúng tôi nhận được yêu cầu sắp xếp ngày dateUpdated, ví dụ: chúng tôi không muốn sử dụng .sortable, vì trường đó là ngày. Nếu Yêu cầu sắp xếp theo 'tên', chúng tôi muốn sử dụng nó, vì trường đó là một chuỗi và không sử dụng nó nếu chúng ta đang cố gắng sắp xếp theo 'giá'.
Logic để kiểm tra loại trường trước khi sắp xếp có vẻ ít kludgy (chúng tôi kiểm tra trong mô hình của chúng tôi, thay vì kiểm tra loại trong elasticsearch) .Nó sẽ rất tuyệt khi LUÔN LUÔN có trường '.sortable' xung quanh, nhưng chúng tôi không thể chạy các loại không phải chuỗi thông qua mẫu động dưới đây và các số không thể chạy qua bộ lọc ngram.
Có ai có đề xuất về cách chúng tôi luôn có thể có trường "có thể phân loại" để sắp xếp, không bao giờ được mã hóa không phân biệt loại đó? Hoặc có thể bạn có một giải pháp tốt hơn cho loại vấn đề mà chúng ta không thấy? Cảm ơn trước!