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

mat*_*ias 3 lucene solr full-text-search sphinx

我正在研究为我参与的项目选择搜索服务器的不同选项.搜索服务器用于在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构建的,我不知道什么会表现最好用于过滤/属性重搜索.

我的问题:

  • 您更喜欢哪些服务器?为什么?
  • 我错过了其他明显的选择吗?

Mau*_*fer 5

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

空间排名

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

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

Solr有很多函数查询来进行提升.

属性过滤器

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

可扩展且快速

很多大型网站都在使用Solr,证明了它的可扩展性和速度.

自由

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