2010-05-07 31 views
5

Tôi đang chạy Solr trên máy tính của mình bằng cách sử dụng cầu nối. Tôi đã tải xuống số Spatial Solr Plugin mà cuối cùng tôi đã xoay xở để bắt đầu và chạy. Tôi cũng đang sử dụng Solrnet để truy vấn chống lại Solr từ dự án asp.net MVC của tôi.Cách thêm Solat Không gian vào truy vấn Solrnet

Bây giờ, việc thêm dữ liệu vào chỉ mục của tôi có vẻ hoạt động tốt và SpatialTierUpdateProcessorFactory cũng không hoạt động.

Vấn đề là:

Làm thế nào để tôi thêm các truy vấn không gian để truy vấn bình thường của tôi bằng cách sử dụng thư viện Solrnet. Tôi đã thử thêm nó bằng cách sử dụng tham số "ExtraParams" nhưng điều đó không hoạt động tốt.

Dưới đây là ví dụ về tôi đang cố gắng kết hợp truy vấn không gian với truy vấn phạm vi dữ liệu. Truy vấn phạm vi ngày hoạt động tốt mà không cần truy vấn không gian gắn liền với nó:

new SolrQuery("{!spatial lat=51.5224 long=-2.6257 radius=10000 unit=km calc=arc threadCount=2}") && new SolrQuery(MyCustomQuery.Query) && new SolrQuery(DateRangeQuery); 

mà kết quả trong các truy vấn sau đây với Solr:

(({!spatial lat=51.5224 long=-2.6257 radius=100 unit=km calc=arc threadCount=2} AND *:*) AND _date:[2010-05-07T13:13:37Z TO 2011-05-07T13:13:37Z]) 

Và thông báo lỗi tôi nhận được lại là:

Máy chủ từ xa đã trả về lỗi: (400) Yêu cầu không hợp lệ.

SEVERE: org.apache.solr.common.SolrException: org.apache.lucene.queryParser.Pars 
eException: Cannot parse '(({!spatial lat=51.5224 lng=-2.6257 radius=10000 unit= 
km calc=arc threadCount=2} AND *:*) AND _date:[2010-05-07T13:09:49Z TO 2011-05-0 
7T13:09:49Z])': Encountered " <RANGEEX_GOOP> "lng=-2.6257 "" at line 1, column 2 
4. 
Was expecting: 
    "}" ... 

Hiện tại, nếu tôi sử dụng trang Quản trị viên Solr và thực hiện truy vấn sau đây, mọi thứ đều hoạt động tốt.

{!spatial lat=50.8371 long=4.35536 radius=100 calc=arc unit=km threadcount=2}text:London 

Cách tốt nhất/chính xác để gọi hàm không gian bằng SolrNet là gì? Cách tốt nhất để bằng cách nào đó thêm bit truy vấn đó theo cách thủ công vào chuỗi truy vấn và là như thế nào?

Trả lời

5

Sử dụng các lớp LocalParams để đại diện cho LocalParams in Solr:

solr.Query(new LocalParams { 
    {"type", "spatial"}, 
    {"lat", "-51.5224"}, 
    {"long", "-2.6257"}, 
    {"radius", "10000"}, 
    {"unit", "km"}, 
    {"calc", "arc"}, 
    {"threadCount", "2"}, 
} + Query.Field("text").Is("London")); 

Đây là có sẵn như là của SolrNet 0.3.0b1.

+0

Chúc mừng! Chính xác những gì tôi cần. Tôi đã nhận nó làm việc bằng cách lộn xộn xung quanh với chuỗi truy vấn bằng tay nhưng giải pháp của bạn là cách tốt hơn/sạch hơn để đi. Cảm ơn rất nhiều! – Flo

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