Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体

10
votes
answers
楼主
72 views
+10

選擇具有自定義排名功能的獨立搜索服務器,spartial search

我正在研究為我參與的項目選擇搜索服務器的不同選項。搜索服務器用於在Rails中構建的約會網站上提供結果,其中搜索提供所有'匹配' - 魔術。 典型的查詢將涉及使用表達式(偽代碼)對文檔/結果進行排名: 按排名排序: 如果has_image屬性為true,則為+50 如果has_boost屬性為true,則為+10 如果緯度/經度距離[點] 40英里以內,則為+50 +20如果緯度/經度在80英里以內[點] - (從屬性'age'到30的距離) 過濾: 屬性'年齡'在25到35之間 屬性“性”等於“男性” 默認情況下,我不需要大多數搜索服務器的全文功能,而且我不需要檢索完整的文檔 - 只需要一個唯一的ID。 項目的性質為具有以下屬性的搜索服務器產生: Spartial排名 基於自定義函數的結果排名 屬性過濾器 可擴展且快速 自由 我找到了Sphinx,Solr和ElasticSearch,但所有這些(據我所見)都是針對全文搜索構建和優化的,ES和Solr都是基於Lucene構建的,我不知道什麼會表現最好用於過濾/屬性重搜索。 我的問題: 您更喜歡哪些服務器?為什麼? 我錯過了其他明顯的選擇嗎?
沙发
+40
+50

ElasticSearch也具有所有這些功能。

支持各種語言的地理距離/邊界框/多邊形和自定義分數腳本:http//www.elasticsearch.com/docs/elasticsearch/rest_api/query_dsl/

您對過濾器或其他查詢類型的性能沒有任何問題,我們在某些??情況下對100多個屬性的查詢進行大量過濾,而且速度很快。

另一件需要考慮的事情是與數據存儲集成。ES有一個很好的River功能,但它與所有數據存儲都不兼容,但類似的可以通過post commit hooks實現。

此外,社交網站受益於(近)實時搜索,ElasticSearch默認為1秒。配置和擴展比Solr更乾淨。這是我對每個應用程序經過一個月的評估後的看法。它還可以很好地適應您的數據模型。

希望這可以幫助。

保羅

+50

不知道其他人,但Solr可以做到這一切:

空間排名

你需要每晚構建一個Solr(截至本文撰寫時最新的穩定版本,Solr 1.4.1,不包括此功能),據我所知這是一個非常穩定的主幹功能。

基於自定義函數的結果排名

Solr有很多函數查詢來進行提升。

屬性過濾器

這是一種常見的搜索功能。

可擴展且快速

很多大型網站都在使用Solr,證明了它的可擴展性和速度。

自由

Solr是Apache許可的,非常寬鬆的許可證。

+10

你不是在談論搜索引擎。你在談論數據庫。在SQL中,過濾是標準的SELECT東西; 排名可以通過涉及大量CASE的一些狡猾的表達來完成,然後是ORDER BY。

要執行查詢的空間部分,您需要一個具有地理空間功能的數據庫。

PostgreSQL是唯一具有地理空間特性的可擴展,快速,免費的關係數據庫。

0

我認為雖然您可以使用像Solr或ES這樣的搜索引擎來支持這一點,但我認為您定義的“業務規則”意味著您最終會進行後期處理。

我認為過濾和基本搜索很容易在您的搜索引擎中完成,但我猜測排序邏輯最終會變得非常自定義和復雜,並且嘗試將其推送到您的搜索查詢中可能就像放置一輪掛在一個方孔...最好查詢結果,然後使用自己的後處理器規則庫來處理排序。

discard