2012-07-03 43 views
6

Khi tôi sử dụng một máy phân tích với edgengram (min = 3, max = 7, phía trước) + term_vector = with_positions_offsetsElasticsearch - EdgeNgram + Điểm nổi bật + term_vector = nổi bật xấu

Với tài liệu có text = "CouchDB"

Khi tôi tìm kiếm cho "couc"

nổi bật của tôi là trên "cou" chứ không phải "couc"


dường như điểm nhấn của tôi là chỉ trên thẻ phù hợp tối thiểu "cou" w hile tôi sẽ mong đợi được trên mã thông báo chính xác (nếu có thể) hoặc ít nhất là mã thông báo dài nhất được tìm thấy.

Nó hoạt động tốt mà không có phân tích các văn bản với term_vector = with_positions_offsets

tác động loại bỏ các term_vector là gì = with_positions_offsets cho buổi trình diễn?

+0

không có giải pháp hoặc câu trả lời nào về tác động của with_positions_offsets? –

Trả lời

8

Khi bạn đặt term_vector=with_positions_offsets cho một trường cụ thể, điều đó có nghĩa là bạn đang lưu trữ vectơ thuật ngữ cho mỗi tài liệu, cho trường đó.

Khi nói đến làm nổi bật, thuật ngữ vectơ cho phép bạn sử dụng công cụ đánh dấu véc tơ nhanh màu xanh lục, nhanh hơn công cụ đánh dấu chuẩn. Lý do là các highlighter tiêu chuẩn không có bất kỳ cách nhanh chóng để làm nổi bật kể từ khi chỉ số không chứa đủ thông tin (vị trí và offsets). Nó chỉ có thể phân tích lại nội dung của trường, đánh chặn các vị trí và vị trí và làm nổi bật dựa trên thông tin đó. Quá trình này có thể mất nhiều thời gian, đặc biệt là với các trường văn bản dài.

Sử dụng vectơ cụm từ bạn có đủ thông tin và không cần phải phân tích lại văn bản. Nhược điểm là kích thước của chỉ số, mà đáng chú ý sẽ tăng lên. Tôi phải thêm rằng vì vector vectơ Lucene 4.2 được nén tốt hơn và được lưu trữ theo cách tối ưu. Ngoài ra còn có PostingsHighlighter mới dựa trên khả năng lưu trữ bù trừ trong danh sách bài đăng, yêu cầu ít không gian hơn.

elasticsearch sử dụng tự động cách tốt nhất để làm nổi bật dựa trên thông tin có sẵn. Nếu các vectơ hạn được lưu trữ, nó sẽ sử dụng công cụ đánh dấu vectơ nhanh, nếu không thì sẽ là tiêu chuẩn. Sau khi bạn reindex mà không có vectơ hạn, làm nổi bật sẽ được thực hiện bằng cách sử dụng highlighter tiêu chuẩn. Nó sẽ chậm hơn nhưng chỉ số sẽ nhỏ hơn.

Về trường ngram, hành vi được mô tả là lạ vì highlighter vector nhanh sẽ có hỗ trợ tốt hơn cho các trường ngram, do đó tôi mong đợi kết quả ngược lại chính xác.

+0

Cảm ơn, vì vậy tôi biết tác động hiệu suất ngay bây giờ. Hy vọng ai đó sẽ có thể giải thích hành vi này. Có lẽ bởi vì logic ngram cũng được áp dụng cho truy vấn tìm kiếm, trong khi nó không nên? –

+1

Không nghĩ về nó, vâng, nó có ý nghĩa. Thông thường cho ngrams bạn có một chuỗi phân tích khác nhau tại thời điểm truy vấn, không có ngram.Nếu không, bạn cũng tạo ra các truy vấn ngẫu nhiên và bạn nhận được nhiều kết quả hơn các hành vi kỳ vọng và kỳ lạ. – javanna

+0

ok cảm ơn tôi nên thử rằng sau đó;) –

4

Tôi biết câu hỏi này là cũ, nhưng nó vẫn chưa được trả lời hoàn toàn:

Có một tùy chọn mà có thể chịu khuất phục trước một hành vi kỳ lạ như vậy:

Bạn phải thiết lập require_field_match để true nếu bạn không muốn các kết quả tài liệu khác ảnh hưởng đến việc đánh dấu tài liệu hiện tại, hãy xem: http://www.elasticsearch.org/guide/reference/api/search/highlighting/

+0

require_field_match chỉ là về tên trường, tôi không nghĩ rằng nó liên quan đến trường hợp này. Tôi có nghĩa là nếu bạn có truy vấn trên trường tiêu đề và bạn làm nổi bật tiêu đề và mô tả, các cụm từ khớp trên trường mô tả sẽ không được đánh dấu, mặc dù chúng là mặc định. – javanna

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