2013-05-13 19 views
24

Sự khác biệt giữa hai, những người nắm giữ tất cả các trường, eludes tôi.sự khác biệt giữa _source và _all trong Elasticsearch

Nếu tài liệu của tôi có:

{"mydoc": 
    {"properties": 
     {"name":{"type":"string","store":"true"}}, 
     {"number":{"type":"long","store":"false"}}, 
     {"title":{"type":"string","include_in_all":"false","store":"true"}} 

    } 
} 

Tôi hiểu _source đó là một lĩnh vực mà có tất cả các lĩnh vực. Nhưng vậy thì sao? Điều này có nghĩa là "tên" được lưu nhiều lần (hai lần? Trong _src và trong _all), tăng không gian đĩa mà tài liệu cần?

"Tên" được lưu trữ một lần cho trường này, một lần cho _source và một lần cho _all? Còn về "số", anh ta có được lưu trữ trong tất cả, mặc dù không có trong _source không?

Khi nào tôi nên sử dụng _source trong truy vấn của mình và khi _all?

Usecase nơi tôi có thể tắt "_all" và chức năng nào sau đó sẽ bị từ chối?

Trả lời

43

Khá giống với sự khác biệt giữa các trường được lập chỉ mục và trường được lưu trữ trong lucene.

Bạn sử dụng các trường được lập chỉ mục khi bạn muốn tìm kiếm trên chúng, trong khi bạn lưu trữ các trường mà bạn muốn trả về dưới dạng kết quả tìm kiếm.

Trường _source có nghĩa là lưu trữ toàn bộ tài liệu nguồn ban đầu được gửi tới elasticsearch. Nó được sử dụng như kết quả tìm kiếm, được lấy ra. Bạn không thể tìm kiếm trên đó. Trong thực tế, nó là một lĩnh vực được lưu trữ trong lucene và không lập chỉ mục.

Trường _all có nghĩa là lập chỉ mục tất cả nội dung đến từ tất cả các trường mà tài liệu của bạn bao gồm. Bạn có thể tìm kiếm trên nó nhưng không bao giờ trả lại, vì nó được lập chỉ mục nhưng không được lưu trữ trong lucene.

Không có dự phòng, hai trường có nghĩa là cho một lần sử dụng khác và được lưu trữ ở những nơi khác nhau, trong chỉ mục lucene. Trường _all trở thành một phần của cái mà chúng tôi gọi là chỉ mục ngược, sử dụng để lập chỉ mục văn bản và có thể thực hiện tìm kiếm toàn văn với nó, trong khi trường _source chỉ được lưu trữ như một phần của tài liệu sáng suốt.

Bạn sẽ không bao giờ sử dụng trường _source trong truy vấn của mình, chỉ khi bạn nhận lại kết quả vì đó là những gì elasticsearch trả về theo mặc định. Có một vài tính năng phụ thuộc vào trường _source, mà bạn bị mất nếu bạn vô hiệu hóa nó. Một trong số đó là update API. Ngoài ra, nếu bạn tắt tính năng này, bạn cần phải nhớ định cấu hình là store:yes trong ánh xạ của mình tất cả các trường mà bạn muốn trả lại dưới dạng kết quả tìm kiếm. Tôi thà nói không tắt nó trừ khi nó làm phiền bạn, vì nó thực sự hữu ích trong nhiều trường hợp. Một ứng dụng thông thường khác sẽ là khi bạn cần kết nối lại dữ liệu của mình; bạn chỉ có thể truy xuất tất cả các tài liệu của bạn từ chính elasticsearch và chỉ gửi lại chúng tới một chỉ mục khác. Mặt khác, trường _all chỉ là trường bắt mặc định, bạn có thể sử dụng khi bạn chỉ muốn tìm kiếm trên tất cả các trường có sẵn và bạn không muốn chỉ định tất cả các trường trong truy vấn của mình. Đó là tiện dụng nhưng tôi sẽ không dựa vào nó quá nhiều vào sản xuất, nơi nó tốt hơn để chạy các truy vấn phức tạp hơn trên các lĩnh vực khác nhau, với trọng lượng khác nhau mỗi. Bạn có thể muốn vô hiệu hóa nó nếu bạn không sử dụng nó, điều này sẽ có tác động nhỏ hơn việc vô hiệu hóa các _source theo ý kiến ​​của tôi.

+0

Cảm ơn! Nếu tôi đặt trường thành "chỉ mục": "không", trường đó vẫn xuất hiện trong "_all", phải không? Vì vậy, nếu tôi không có ý định thực hiện tìm kiếm văn bản đầy đủ trên nhiều trường được chỉ định tại một thời điểm, hãy biến "include_in_all" thành false trên tất cả các trường của tôi sẽ tiết kiệm không gian, đúng không? – eran

+1

Tôi đã thêm một số suy nghĩ khác vào câu trả lời của mình trong thời gian chờ đợi. Trường '_all' được đặt mặc định là' "index": yes' và không liên quan đến ánh xạ của các trường khác nếu không khi sử dụng tùy chọn 'include_in_all'. Nếu bạn không sử dụng trường '_all' tôi sẽ vô hiệu hóa nó hoàn toàn thay vì thiết lập tất cả các trường thành' "include_in_all": false'. – javanna

+0

Cảm ơn, việc vô hiệu hóa trường '_all' có tiết kiệm dung lượng đĩa đáng kể không? (có vẻ như nó gần như tăng gấp đôi không gian cần thiết, trực quan) – eran

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