Vì vậy, tôi có một lĩnh vực mà các cửa hàng một giá trị trong các định dạng: number/year
, một cái gì đó giống như 23/2014, 24/2014, 12/2015, vv ...Làm cách nào để tạo các giá trị chính xác và truy vấn đối sánh trên cùng một trường trong elasticsearch?
vì vậy nếu lĩnh vực này được ánh xạ như một not_analyzed
một, Tôi có thể thực hiện tìm kiếm giá trị chính xác với bộ lọc cụm từ, nếu tôi tìm kiếm giá trị trong cấu trúc chính xác đó (như tháng 1/2014, 15/2014, ...), nó hoạt động như sql equals(=)
.
{
"query": {
"filtered": {
"filter": {
"term": {
"processNumber": "11/2014"
}
}
}
}
}
Vì vậy, tìm kiếm với thứ gì đó khác như 11/hoặc 2014 không trả về lần truy cập. Điều này là tốt.
Nhưng nếu tôi xác định trường là not_analyzed
, tôi không thể thực hiện sql LIKE
tìm kiếm loại với truy vấn match_phrase
.
{
"query": {
"match_phrase": {
"processNumber": "11/201"
}
}
}
Trong trường hợp này tìm kiếm 11,11 /,/2014 hoặc 2014 phải trả về số truy cập nhưng không. Vấn đề là truy vấn này hoạt động nếu trường không được ánh xạ dưới dạng not_analyzed
. Vì vậy, có vẻ như tôi phải sử dụng một hoặc khác, vấn đề là lĩnh vực nên hỗ trợ cả hai tùy chọn cho các truy vấn khác nhau, tôi có thiếu cái gì ở đây?
Cảm ơn. Tôi hiện đang sử dụng tích hợp mùa xuân với elasticsearch và đây là cách trường được ánh xạ hiện tại: @Field (type = String, index = FieldIndex.not_analyzed) public String processNumber; Tôi không biết có cách nào để đặt thuộc tính trường tại đây hay không. – Maxrunner
Ok tôi nghĩ tôi đã làm việc này: @MultiField ( mainField = @ Field (type = String, index = FieldIndex.not_analyzed), otherFields = @NestedField (dotSuffix = "analysis", type = String, index = FieldIndex.analyzed) ) Nhưng bạn có thể cho tôi biết sự khác biệt giữa tất cả ba truy vấn đối sánh không? – Maxrunner
@Maxrunner đã chỉnh sửa câu trả lời để đưa ra giải thích ngắn gọn về các truy vấn. – keety