lập chỉ mục tài liệu nhẹ để xử lý hồ sơ tiềm năng dưới 250k


10

Gần đây, tôi thấy mình lo lắng về những hạn chế của công cụ lập chỉ mục tài liệu. Tôi đang phát triển một trang web nhỏ cần một số khả năng tìm kiếm khá mạnh mẽ nhưng do hạn chế về phần cứng của họ, tôi không thể triển khai giải pháp Lucene-ish (như Solr hoặc ElasticSearch, như tôi thường làm) để đáp ứng nhu cầu này.

Và thậm chí sau đó, trong khi tôi cần cung cấp một số dữ liệu và tính toán phức tạp đòi hỏi nhiều cơ sở dữ liệu, tôi không cần phải xử lý hơn 250 nghìn hồ sơ tiềm năng. Triển khai toàn bộ cá thể Solr hoặc ES chỉ để xử lý việc này có vẻ như là một sự lãng phí.

Sau khi tôi nghĩ về nó, nó có vẻ như là một vấn đề khá lớn. Hầu hết mọi người xử lý các yêu cầu tìm kiếm chỉ với SQL. Họ chỉ chạy các truy vấn SQL cho dữ liệu của họ và đó là điều đó. Khả năng tìm kiếm của họ cuối cùng cũng rất tệ.

  • Thực hiện tìm kiếm ký tự đại diện toàn văn có thể rất chậm trên một số hệ thống (cụ thể là máy chủ được chia sẻ) và làm hỏng cơ sở dữ liệu của bạn, đặc biệt nếu bạn có các truy vấn phức tạp và nhiều liên kết.

  • Bạn cuối cùng thực hiện nhiều truy vấn trên một yêu cầu từ người dùng. Bạn có thể giải quyết vấn đề này bằng các truy vấn phức tạp hơn bao giờ hết, nhưng hãy xem điểm trước đó.

  • Thiếu các tính năng thường có trong các công cụ toàn văn.

Cơ sở dữ liệu có cùng một vấn đề cần phải được triển khai như một máy chủ và sau đó SQLite xuất hiện và đột nhiên chúng ta có thể triển khai một cơ sở dữ liệu được chứa trong một tệp duy nhất. Google Googling của tôi đã không tạo ra gì - tự hỏi liệu có thứ gì đó tồn tại như thế này để lập chỉ mục / tìm kiếm toàn văn bản không.

Những yếu tố nào cần tính đến khi quyết định thực hiện lập chỉ mục tài liệu nhẹ (ví dụ như được giải thích trong câu trả lời cho câu hỏi khác ) hoặc tiếp tục sử dụng SQL cho các tình huống này?


5
Xin đừng làm nghiên cứu thị trường của bạn ở đây. Câu hỏi không có chủ đề ở đây. Bạn có thể gặp may mắn hơn khi hỏi nó khi khởi động , mặc dù vậy bạn nên đọc Câu hỏi thường gặp của họ trước.
Oded

9
Whoa - Tôi không muốn thành lập công ty hay bất cứ điều gì ở đây. Đây chỉ là một câu hỏi trung thực tìm kiếm công nghệ để sử dụng trong một tình huống hoặc một giải pháp khác nằm ngoài hộp hiện tại.
Jarrod Nettles

16
Đây là một trang web về các vấn đề khái niệm trong phát triển phần mềm. Xin đừng hỏi về các vấn đề khái niệm bạn đang gặp phải trong phát triển phần mềm.
psr

3
Có một câu hỏi hay trong đó ... Tôi nghĩ rằng nó chỉ cần được làm sạch để làm cho nó rõ ràng và cụ thể hơn.
GrandmasterB

3
Nếu khiếu nại duy nhất của bạn về SQLite là thiếu lập chỉ mục văn bản, tại sao bạn không sử dụng mô đun mở rộng FTS4 của SQLite ?
Brian

Câu trả lời:


2

Bạn biết đấy, tôi phải nói cân nhắc sử dụng redis.

  • Sử dụng ý tưởng của bối cảnh . Sẽ rất khó để đi sâu mà không biết thêm về các tài liệu. Thường thì bạn có thể nhận ra nhiều điều từ các tiêu đề của tài liệu. Cấu hình mỗi tài liệu là bước đầu tiên cơ bản, giống như thu thập dữ liệu trên web.

  • Hãy đếm từng tài liệu của các từ trong từ điển từ khóa. Theo dõi số lượng phổ biến của từng từ cho tổng dự án. Tăng thêm trọng lượng cho iterator cho số này nếu bạn tình cờ có thể phát hiện mức độ liên quan cao trong tài liệu hoặc bộ.

    Điều đầu tiên này là cung cấp cho bạn một danh sách các từ bao gồm trong toàn bộ tập hợp của bạn. Bất cứ điều gì KHÔNG tìm thấy trong danh sách đó, tự động trả về 'không có kết quả'. Tôi muốn đề xuất xếp hạng kết quả thấp hơn mức phổ biến 5-20% (khi chạy truy vấn tìm kiếm trên chỉ mục) cũng chỉ đơn giản là không có kết quả '.

  • Nếu bạn thực hiện với một cái gì đó như redis hoặc thậm chí chỉ tạo cấu trúc bộ nhớ của riêng bạn, bạn có thể ghép các tài liệu với các tệp mô tả hoặc các đối tượng trang và tệp db mô tả từng tài liệu cụ thể qua lại vào bộ nhớ. Giữ các tìm kiếm phổ biến trong bộ nhớ bằng cách có thể để chúng cạnh tranh các vị trí hoặc cho chúng thời gian để phát triển trên mỗi tìm kiếm.

  • Để đi xa hơn, hãy bắt đầu lưu dữ liệu tham chiếu nhóm một liên kết / ref / con trỏ / chỉ mục / bất cứ thứ gì trong hai hoặc nhiều tài liệu và một nhóm từ khóa hoặc cụm từ. Về cơ bản, bạn nhận được một đám mây thẻ được bơm lên.

  • Hơn nữa, hãy phát hiện cụm từ bằng cách theo dõi khi một từ trong từ điển của bạn được theo dõi hoặc được đặt trước bởi một chuỗi chính xác thường có trong các tài liệu có siêu dữ liệu / tiêu đề tương tự. Điều này là chuyên sâu nhưng chỉ cần một lần vượt qua để kết xuất dữ liệu.

  • Càng nhiều cách bạn có thể tách biệt dữ liệu của bạn và giữ các nhóm liên quan với nhau trong sử dụng thực tế, thì càng tốt.

  • Kết nối khả năng chính xác bằng cách theo dõi mỗi khi người dùng nhấp vào kết quả không phải là ba kết quả hàng đầu. Đạt được cải thiện phát hiện cụm từ bằng cách xem các tìm kiếm của người dùng không mang lại kết quả hoàn hảo. Buộc các truy vấn của bạn trở nên liên quan đến các tìm kiếm của khách hàng.

  • Bạn có phải xem cập nhật tài liệu? Chronjobs / shell script hoặc tác vụ theo lịch trình / tập lệnh bó có thể giúp đỡ. Có nhiều lựa chọn khác nhau để lên lịch và viết kịch bản mặc dù rõ ràng.

  • Đĩa thải, tăng tốc, mất độ phức tạp. Lưu nhiều cây tài liệu của bạn và / hoặc cây liên kết vào tài liệu. Chỉ tìm kiếm những cây mà tiêu chí đã được đáp ứng, hoặc ít nhất là thích chúng để có kết quả nhanh hơn trong hầu hết các trường hợp.

  • Tạo công cụ hoán vị nhẹ của riêng bạn hoặc tìm một công cụ sử dụng phát hiện ký tự nhanh và không có biểu thức chính quy. Hoặc chỉ cần thực hiện một lần sử dụng regex trong vài giờ nhưng sự khác biệt về hiệu suất sẽ được chú ý ở đây để có đủ các tìm kiếm.

  • Rất nhiều điều.

Đây là những giải pháp khả thi để thực hiện lập chỉ mục và tìm kiếm tài liệu mạnh mẽ. Nó không bao gồm tất cả. Và tại đó, bạn có thể làm tốt hơn để lấy một hộp dự phòng, ném một mạng lưới thần kinh vào nó và dành một vài ngày để tạo ra một giao diện web đẹp cho mạng lưới thần kinh đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.