2012-10-24 26 views
10

Cố gắng sử dụng ElasticSearch để tạo tìm kiếm sử dụng khoảng cách từ điểm giữa để ảnh hưởng đến mức độ liên quan.ElasticSearch - sử dụng khoảng cách từ điểm đến ảnh hưởng đến mức độ liên quan của truy vấn

Tôi không muốn chỉ đơn giản là sắp xếp khoảng cách từ điểm mà tôi biết là có thể, bởi vì tôi muốn mức độ liên quan dựa trên truy vấn được tìm kiếm cũng ảnh hưởng đến kết quả.

Tôi muốn chuyển một chuỗi tìm kiếm, nói "coffee" và lat/lon, nói "38, -77" và nhận kết quả của tôi theo thứ tự kết hợp cách liên quan đến "cà phê" "và cách chúng gần" 38, -77 ".

Cảm ơn!

Trả lời

6

Bạn có thể sử dụng distance function trong tập lệnh Custom Score Query để sửa đổi _score dựa trên khoảng cách từ điểm giữa.

+0

Các trọng số đó có được áp dụng sau khi tìm kiếm thực tế không? Lý do tôi hỏi là vì nếu giới hạn tìm kiếm là 100 kết quả và tổng số kết quả phù hợp là 1000, thì một số kết quả rất gần có thể bị loại bỏ nếu chúng đến sau 100. –

+0

Những trọng số này sẽ được áp dụng sau khi tìm kiếm nhưng trước khi truy xuất. Tìm kiếm đầu tiên được thực hiện và kết quả 1000 (trong ví dụ của bạn) được thu thập. Đối với mỗi kết quả thu được, điểm liên quan được tính toán bằng cách sử dụng tập lệnh được cung cấp và 100 kết quả hàng đầu được giữ lại. Khi tất cả 1000 bản ghi từ kết quả tìm kiếm được xử lý, 100 bản ghi hàng đầu được truy lục. – imotov

+0

Cảm ơn bạn rất nhiều vì đã giúp đỡ! Đây có phải là cách elasticsearch luôn hoạt động không? Dường như đối với một số truy vấn bao gồm một lượng lớn "độ mờ", tập hợp tìm kiếm tiềm năng có thể bao gồm hàng triệu kết quả có mức độ liên quan thấp. Làm thế nào để elasticsearch biết khi nào nên ngừng tìm kiếm? –

10

Hàm gần đây (0.90.4) đã thêm vào_loại truy vấn thêm hỗ trợ cho xếp hạng dựa trên khoảng cách. Đây là một thay thế cho loại truy vấn điểm tùy chỉnh.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

Một ví dụ dỡ bỏ từ đó:

"query": { 
    "function_score": { 
    "functions": [ 
     { "gauss": { "loc": { "origin": "51,0", "scale": "5km" }}}, 
    ] 
    } 
} 

này áp dụng một hàm phân rã (có một số) vào một lĩnh vực ("loc") mà điểm số so với khoảng cách từ một nguồn gốc được đưa ra một quy mô cụ thể. Đây chính xác là những gì bạn muốn cho xếp hạng khoảng cách vì nó cung cấp cho bạn rất nhiều tính linh hoạt để làm thế nào nó nên xếp hạng mà không cần viết kịch bản tùy chỉnh.

+0

Loại trường nào là "loc"? Bạn có thể giải thích thêm một chút về nó? Tôi có một cái gì đó như thế này "" loc ":" 12.5,65.5 "và nó dường như không hoạt động. –

+0

có thể đã thay đổi kể từ khi tôi viết bài này, đã có rất nhiều thay đổi về công cụ địa lý trong các phiên bản elasticsearch gần đây. 0.90.4 là một thời gian dài trước đây. –

+0

Sẽ tìm hiểu. Cảm ơn ! –

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