2013-06-24 43 views
14

Tôi không thể hiểu tại sao tìm kiếm của tôi phân biệt chữ hoa chữ thường. Tất cả mọi thứ tôi đã đọc nói rằng ES là không nhạy cảm theo mặc định. Tôi có ánh xạ mà chỉ định phân tích tiêu chuẩn cho chỉ mục và tìm kiếm nhưng nó có vẻ như một số thứ vẫn là trường hợp nhạy cảm - tức là, wildcard:Không phân biệt chữ hoa chữ thường không hoạt động

"query": { 
"bool": { 
    "must": [ 
    { 
     "wildcard": { 
     "name": { 
      "value": "Rae*" 
     } 
     } 
    } 
    ] 
} 

này thất bại nhưng "rae *" hoạt động như mong muốn. Tôi cần sử dụng ký tự đại diện cho các tìm kiếm loại 'bắt đầu bằng' (tôi đoán).

Tôi đang sử dụng NEST từ một ứng dụng Net và đang xác định các phân tích khi tôi tạo ra các chỉ số như sau:

var settings = new IndexSettings(); 
    settings.NumberOfReplicas = _configuration.Replicas; 
    settings.NumberOfShards = _configuration.Shards; 
    settings.Add("index.refresh_interval", "10s"); 
    settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("keyword", new KeywordAnalyzer())); 
    settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("simple", new SimpleAnalyzer())); 

Trong trường hợp này nó đang sử dụng máy phân tích đơn giản nhưng một trong những tiêu chuẩn có kết quả tương tự.

Việc lập bản đồ trông như thế này:

name: { 
    type: string 
    analyzer: simple 
    store: yes 
} 

Bất cứ ai có bất kỳ ý tưởng whats sai ở đây?

Cảm ơn

+1

Với phiên bản bổ sung khác của ES (2.3) bạn có thể sử dụng đề xuất hoàn thành cho điều này. – myusuf

+0

tôi có cùng một vấn đề. ngay cả khi đã cố gắng "query_string" nó không hoạt động trong ES 5.1, nhưng nó làm việc trong 2.3. !!!! – Telebh

Trả lời

24

Từ documentation,

"[Truy vấn wildcard] phù hợp với tài liệu có các lĩnh vực phù hợp với một biểu thức wildcard (không được phân tích)".

Vì cụm từ tìm kiếm không được phân tích, về cơ bản bạn sẽ cần tự chạy phân tích trước khi tạo truy vấn tìm kiếm. Trong trường hợp này, điều này chỉ có nghĩa là cụm từ tìm kiếm của bạn cần phải là chữ thường. Ngoài ra, bạn có thể sử dụng query_string:

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "query_string": { 
      "query": "name:Rae*" 
      } 
     } 
     ] 
    } 
    } 
} 
+0

CÓ CÓ CÓ !!! Cảm ơn bạn rất nhiều. – Jonesie

Các vấn đề liên quan