2009-04-15 25 views
5

Tôi đang sử dụng Nhân sư với plugin Nhân sư tư duy. Tôi đã lập chỉ mục một mô hình gọi là Địa điểm với đoạn mã sau (và rake thinking_sphinx: lệnh index)Nhân sư trả về kết quả tìm kiếm không hợp lệ

define_index do 
    indexes :name 
    indexes city 
    indexes zip 
end 

tôi có được các kết quả trong điều khiển của tôi với mã này:

@venues = Venue.search params[:search] 

và tôi làm cho họ như json. Vấn đề tôi gặp phải là khi tôi nhấn URL này:

http://localhost:3000/venue/list?search=Baltimo 

Tôi không nhận được gì. Nhưng khi tôi nhấn URL này:

http://localhost:3000/venue/list?search=Baltimor 

Tôi nhận tất cả Địa điểm nằm ở thành phố Baltimore. Vì lý do nào đó mà một nhân vật tạo nên sự khác biệt. Về mặt lý thuyết, tôi nên nhận tất cả Địa điểm ở Baltimore nếu tôi chỉ tìm kiếm một ký tự - 'b'

Có ai biết điều gì đang xảy ra ở đây không?

Cảm ơn bạn

Trả lời

6

Trừ khi bạn có enable_star thiết lập để 1 và min_prefix_len hoặc min_infix_len thiết lập để 1 hoặc nhiều hơn, bạn sẽ không nhận được B để phù hợp Baltimore (và thậm chí sau đó, tôi nghĩ rằng bạn cần phải tìm kiếm cho B * để có được trận đấu).

gì đang xảy ra ở đây là theo mặc định, Suy nghĩ Sphinx nói Sphinx sử dụng một Stemmer tiếng Anh, cho phép tương tự lời (bằng cách nhân vật, không phải bởi ý nghĩa) được coi là trận đấu, vì vậy nó đặt BaltimorBaltimore trong cùng một giỏ.

Nếu bạn muốn nhận được bất kỳ phần nào của bất kỳ từ nào phù hợp, sau đó bạn cần phải đặt một cái gì đó như sau trong config/sphinx.yml:

development: 
    enable_star: 1 
    min_infix_len: 1 
test: 
    enable_star: 1 
    min_infix_len: 1 
production 
    enable_star: 1 
    min_infix_len: 1 

Sau đó dừng Sphinx, tái chỉ mục, và khởi động lại Sphinx . Một khi bạn đã làm điều đó, sau đó tìm kiếm cho B * nên trở về Baltimore.

Hy vọng điều này sẽ hữu ích.

+0

ngọt ngào, chỉ thấy rằng trên tài liệu nhân sư ... nhưng không thể tìm thấy nơi nó được nói để đặt điều đó trong yml. cảm ơn bạn! – Tony

+0

Có cách nào mà họ không phải gõ * vào cuối không? Giống như gỗ tìm kiếm sẽ kéo lên bằng gỗ và chế biến gỗ mà không cần phải gõ gỗ * – Mike

+0

Câu trả lời hay. Đối với bất kỳ ai tình cờ gặp phải, các chi tiết được tìm thấy tại http://freelancing-god.github.com/ts/en/advanced_config.html. Một điều cần lưu ý là việc đặt min_infix_len thành 1 có khả năng sẽ giảm hiệu suất. – dmonopoly

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