2013-04-10 64 views
34

Tôi đang xem http://euphonious-intuition.com/2012/08/more-complicated-mapping-in-elasticsearch/ giải thích các trình phân tích ElasticSearch.Tìm kiếm đàn hồi- search_analyzer vs index_analyzer

Tôi không hiểu một phần về việc có các trình phân tích chỉ mục và tìm kiếm khác nhau. Ví dụ thứ hai của bản đồ tùy chỉnh đi như thế này:
-> phân tích chỉ số là một edgeNgram
-> máy phân tích tìm kiếm là:

"full_name":{ 
    "filter":[ 
     "standard", 
     "lowercase", 
     "asciifolding" 
    ], 
    "type":"custom", 
    "tokenizer":"standard" 
} 

nếu chúng ta muốn truy vấn "Race" để không trả lại kết quả như * ra * pport và * rac * ial do edgeNgram, tại sao chỉ mục nó với edgeNgram ở vị trí đầu tiên?

Vui lòng giải thích với ví dụ về các trình phân tích khác nhau hữu ích.

+1

Tôi có thể biết câu trả lời của tôi có làm rõ hơn cho bạn không? – javanna

+0

Liên kết ở trên cùng bị hỏng – Artem

Trả lời

73

Bạn thường có chuỗi phân tích tương tự ở cả thời gian chỉ mục và thời gian truy vấn. Tương tự không có nghĩa là giống nhau, nhưng thường là cách bạn lập chỉ mục tài liệu phản ánh cách bạn truy vấn chúng.

Ví dụ ngrams là một sự phù hợp thực sự tốt, vì đó là một trong những lý do chính tại sao bạn sẽ sử dụng các trình phân tích khác nhau tại chỉ mục và thời gian truy vấn.

Đối với các trận đấu một phần bạn chỉ với ngrams cạnh, vì vậy mà "elasticsearch" trở thành (với mingram 3 và maxgram 20):

"ela", "elas", "ELAST", "elasti", "đàn hồi "," elastics "," đàn hồi "," elasticsea "," elasticsear "," eleasticsearc "và" elasticsearch "

Bây giờ hãy truy vấn trường đã tạo. Nếu chúng tôi truy vấn cụm từ "co giãn" có một kết quả phù hợp và chúng tôi sẽ lấy lại kết quả mong đợi. Về cơ bản, chúng tôi đã trở thành những gì chúng tôi gọi ở trên một phần khớp chính xác, với những gì chúng tôi đã lập chỉ mục. Không cần phải áp dụng ngram vào truy vấn. Nếu chúng tôi đã làm chúng tôi sẽ truy vấn cho tất cả các điều khoản sau đây:

"ela", "elas", "ELAST", "elasti" và "đàn hồi"

Điều đó sẽ làm cho cách truy vấn phức tạp hơn và có thể dẫn để có kết quả lạ. Giả sử bạn lập chỉ mục cụm từ "đã trôi qua" trong một tài liệu khác, cùng một trường. Bạn sẽ có ngrams sau:

"ela", "ELAP", "elaps", "trôi qua", "trôi"

Nếu bạn tìm kiếm cho "co giãn" và làm cho ngrams với truy vấn, thuật ngữ "ela" sẽ khớp với tài liệu thứ hai này, do đó bạn sẽ lấy lại nó cùng với tài liệu đầu tiên, mặc dù không có thuật ngữ nào chứa toàn bộ thuật ngữ "đàn hồi" mà bạn đang tìm kiếm.

Tôi khuyên bạn nên xem analyze api để chơi xung quanh với trình phân tích khác và kết quả khác nhau của chúng.

+1

Cảm ơn bạn, câu trả lời đã làm mọi thứ rõ ràng hơn :) –

+1

[Điều này] (https://github.com/polyfractal/elasticsearch-inquisitor) elasticsearch plugin giúp rất nhiều để xem cách phân tích khác nhau hoạt động. – gsk

+0

@gsk Cảm ơn rất nhiều người đàn ông thực sự cảm ơn rất nhiều vì đã đề cập đến plugin trên thực sự rất hữu ích để xem dữ liệu của tôi được lập chỉ mục như thế nào trong elasticsearch. –

7

Để tham khảo the official documentation about index vs search analyzers:

đôi khi, nó làm cho cảm giác sử dụng một máy phân tích khác nhau tại chỉ mục và thời gian tìm kiếm. Ví dụ: tại thời điểm chỉ mục, chúng tôi có thể muốn lập chỉ mục các từ đồng nghĩa , ví dụ như đối với mỗi lần xuất hiện nhanh chóng, chúng tôi cũng lập chỉ mục nhanh, nhanh chóng và nhanh chóng. Nhưng vào thời gian tìm kiếm, chúng tôi không cần tìm kiếm tất cả các từ đồng nghĩa .Thay vào đó, chúng tôi chỉ có thể tìm kiếm một từ mà người dùng đã nhập, nhanh chóng, nhanh chóng, nhanh chóng hoặc nhanh chóng.

Để bật sự khác biệt này, Elasticsearch cũng hỗ trợ các thông số index_analyzer và search_analyzer và các bộ phân tích có tên default_index và default_search.

Lấy các tham số thêm vào tài khoản, trình tự đầy đủ tại index thời gian thực sự trông như thế này:

  • các index_analyzer quy định tại các bản đồ hiện trường, khác
  • máy phân tích quy định tại các bản đồ hiện trường, khác
  • máy phân tích được xác định trong lĩnh vực _analyzer của tài liệu, khác
  • các index_analyzer mặc định cho các loại hình, mặc định là
  • máy phân tích mặc định cho các loại hình, mặc định là
  • máy phân tích tên default_index trong các thiết lập chỉ mục, mặc định là
  • máy phân tích tên mặc định trong các thiết lập chỉ mục, mặc định là
  • máy phân tích tên default_index tại nút mức, mặc định là
  • máy phân tích tên mặc định ở cấp nút, mặc định là
  • máy phân tích tiêu chuẩn

Và trong khi tìm kiếm:

0.123.
  • máy phân tích được xác định trong truy vấn chính nó, khác
  • các search_analyzer quy định tại các bản đồ hiện trường, khác
  • máy phân tích quy định tại các bản đồ hiện trường, khác
  • các search_analyzer mặc định cho các loại, trong đó giá trị mặc định để
  • máy phân tích mặc định cho các loại hình, mặc định là
  • máy phân tích tên default_search trong các thiết lập chỉ mục, mặc định là
  • các analyz er tên mặc định trong các thiết lập chỉ mục, mặc định là
  • máy phân tích tên default_search ở cấp nút, mặc định là
  • máy phân tích tên mặc định ở cấp nút, mặc định là
  • máy phân tích tiêu chuẩn
Các vấn đề liên quan