首页 文章

选择具有自定义排名功能的独立搜索服务器,spartial search

提问于
浏览
3

我正在研究为我参与的项目选择搜索服务器的不同选项 . 搜索服务器用于在Rails中构建的约会网站上提供结果,其中搜索提供所有'匹配' - 魔术 .

典型的查询将涉及使用表达式(伪代码)对文档/结果进行排名:

  • 按排名排序:

  • 50如果has_image属性为true

  • 10如果has_boost属性为true

  • 50如果纬度/经度距离[点] 40英里以内

  • 20如果纬度/经度在80英里以内[点]

    • (从属性'age'到30的距离)
  • 筛选依据:

  • 属性'age'介于25和35之间

  • 属性'sex'等于'male'

默认情况下,我不需要大多数搜索服务器的全文功能,而且我不需要检索完整的文档 - 只需要一个唯一的ID .

项目的性质为具有以下属性的搜索服务器产生:

  • Spartial排名

  • 基于自定义函数的结果排名

  • 属性过滤器

  • 可扩展且快速

  • 免费

我找到了Sphinx,Solr和ElasticSearch,但所有这些(据我所见)都是针对全文搜索构建和优化的,ES和Solr都是基于Lucene构建的,我不知道什么会表现最好用于过滤/属性重搜索 .

我的问题:

  • 您更喜欢哪些服务器?为什么?

  • 我是否错过了其他明显的选择?

4 回答

  • 1

    ElasticSearch也具有所有这些功能 .

    支持各种语言的地理距离/边界框/多边形和自定义得分脚本:http://www.elasticsearch.com/docs/elasticsearch/rest_api/query_dsl/

    您对过滤器或其他查询类型的性能没有任何问题,我们在某些情况下对100个属性的查询进行了大量过滤,而且速度很快 .

    另一件需要考虑的事情是与数据存储集成 . ES有一个很好的River功能,但它与所有数据存储都不兼容,但类似的可以通过post commit hooks实现 .

    此外,社交网站受益于(近)实时搜索,ElasticSearch默认为1秒 . 配置和扩展比Solr更干净 . 这是我对每个应用程序经过一个月的评估后的看法 . 它还可以很好地适应您的数据模型 .

    希望这可以帮助 .

    保罗

  • 0

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

    空间排名

    你需要一个nightly build of Solr(截至本文撰写时最新的稳定版本,Solr 1.4.1,不包括此功能),据我所知这是一个非常稳定的主干功能 .

    基于自定义函数的结果排名

    索尔有很多function queries来做提升 .

    属性过滤器

    这是一种常见的搜索功能 .

    可扩展且快速

    Lots of big websites正在使用Solr,证明了它的可扩展性和速度 .

    免费

    Solr is Apache licensed,非常宽松的许可证 .

  • 5

    你不是在谈论搜索引擎 . 你在谈论数据库 . 在SQL中,过滤是标准的SELECT东西;排名可以通过涉及大量CASE的一些狡猾的表达来完成,然后是ORDER BY .

    要执行查询的空间部分,您需要一个具有地理空间功能的数据库 .

    PostgreSQL是唯一具有地理空间特性的可扩展,快速,免费的关系数据库 .

  • 4

    我认为,虽然你使用像Solr或ES这样的搜索引擎来支持这一点,但我认为你所定义的"business rules"意味着你最终会进行后期处理 .

    我认为过滤和基本搜索很容易在您的搜索引擎中完成,但我猜测排序逻辑最终会变得非常自定义和复杂,并且尝试将其推送到您的搜索查询中可能就像放置一轮挂在一个方孔...最好查询结果,然后使用自己的后处理器规则库来处理排序 .

相关问题