2012-06-15 34 views
6

Chúng tôi có một tập dữ liệu nhỏ và muốn tìm kiếm thông qua một cách thông minh để điền vào hộp nhập tự động hoàn tất. Người dùng muốn tìm kiếm một loại thực thể, nhưng có thể đưa vào thuộc tính của các loại được liên kết.Có điều gì giống như Solr hoặc Elasticsearch chỉ có thể được sử dụng trên máy khách trong Javascript không?

Như ứng dụng của chúng tôi là rất ngành công nghiệp cụ thể, tôi sẽ cố gắng đặt câu hỏi trừu tượng vào một bối cảnh relatable hơn:

Ví dụ: Người dùng muốn chọn một loại trái cây và có thể sử dụng rất nhiều các đặc điểm khác nhau của trái cây để tìm kiếm nó. Cô ấy có thể tìm kiếm tên của nó (táo), loại đặc biệt của trái cây giống nhau (vàng ngon), phiên bản địa hoá (Apfel, تفاح, Pomme), mà còn các đặc điểm khác, chẳng hạn như chứa thực phẩm trái cây (pandowdy, cider) hoặc thậm chí là kết quả từ tìm kiếm toàn văn bản mô tả của nó.

Thông thường tôi muốn sử dụng một cái gì đó như solr hoặc elasticsearch, nhưng tập dữ liệu của chúng tôi không thực sự lớn với 4-5 thực thể được liên kết với tối đa 200 phần tử mỗi. Ngoài ra nó sẽ ở lại rất tĩnh, với một vài bổ sung biên tập mỗi tuần khác. Vì vậy, chúng tôi đã nghĩ đến việc sử dụng kho dữ liệu của trình duyệt để quản lý và tìm kiếm một số loại chỉ mục. Vấn đề là trong nghiên cứu của chúng tôi, chúng tôi không thể tìm thấy bất cứ điều gì vượt xa sự trừu tượng Web SQL hoặc Indexed DB.

Có bất kỳ dự án hoặc thư viện nào làm việc như solr hoặc elasticsearch và có thể được sử dụng ở phía máy khách cho các tập dữ liệu nhỏ không? Chúng tôi đang tìm kiếm các tính năng sau

  • tìm kiếm nhanh
  • Sơ chế (tokenization, lọc ...)
  • đặt hàng
  • Ranking, truy vấn thúc đẩy

Nó sẽ làm việc trên các trình duyệt gần đây và thiết bị di động, dự phòng câm cho các trình duyệt khác (ví dụ: tìm kiếm toàn văn bản) được chấp nhận

Trả lời

3

IndexedDB Vô cùng cồng kềnh khi làm việc và tôi không nghĩ rằng nó sẽ làm những gì bạn muốn mà không có một số sửa đổi.

WebSql Tôi sử dụng Chrome WebSql (sqlite) với fulltext (FT3) và bạn có thể thực hiện một số truy vấn nâng cao với nó và kết quả tự động trọng số. ví dụ:

cấu trúc table_ft3 = [id, tên, mô tả, vật nuôi]

và bạn có thể truy vấn với "SELECT id TỪ table_ft3 ĐÂU table_ft3 Đội hình thi đấu 'word1 word2 wordfuzzy * -notme + tên yêu cầu: john edwar * vật nuôi mary: dog cat '"

Tuy nhiên, điều này bị hạn chế đối với Chrome. Trên một bảng có 560 nghìn hàng với khoảng 12 từ, mỗi hàng rất nhanh, 10ms và ít hơn.

JSLinq-http://jslinq.codeplex.com/ này là tốt cho tập dữ liệu lớn, bằng cách lưu trữ tất cả mọi thứ trong bộ nhớ nó là ridiculously nhanh, nhưng tôi không nghĩ rằng nó có bất kỳ trọng lượng tiên tiến. Nó có lợi ích bổ sung cho phép bạn viết các hàm truy vấn phức tạp của riêng bạn.

JSII-http://karussell.wordpress.com/2010/11/02/jsii-full-text-search-in-1k-loc-of-javascript/ này sử dụng Lucene phong cách trọng và trên 20k hàng nói trong lúc 50ms mà không phải là lớn nhưng có lẽ đủ tốt cho dữ liệu của bạn.

+0

Tuyệt vời! Cảm ơn nhiều. – Kariem

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