【问题标题】:Sphinx Search - Multi-index search vs Client Program AggregationSphinx 搜索 - 多索引搜索与客户端程序聚合
【发布时间】:2011-10-24 07:22:49
【问题描述】:

寻找实现 Sphinx Search 的 python 客户端的最佳方法。

我正在搜索的数据集由个人资料内容组成。所有配置文件都使用纬度和经度在地理上组织为位置。配置文件具有许多不同的属性,所有这些属性都作为与正确配置文件 ID 关联的 TEXT 存储在数据库中。基本上,从搜索的角度来看,查询过程是发出地理搜索,该搜索使用 Haversign 查找半径内的所有 id,然后使用 Sphinx 搜索所有这些属性以查找其发布内容与发出查询。

到目前为止,我一直在研究的 sphinx 客户端使用 sphinx 的几个不同索引,并运行单独的查询。 python 对象首先运行位置查询,保存该范围内的 id,然后对所有其他索引运行查询,只进行过滤,以便地理集中的 id 可以作为有效结果返回。

我想知道的是,将位置数据加入 sphinx 的全文搜索索引并让 sphinx 处理所有查询是否会更有效,而不是构建使用 api 来“回退”的客户端程序像这样的查询。一个大型索引将所有数据收集为一个狮身人面像“文档”而不是让客户端负责运行额外的查询和过滤是否有任何优势?

下面发布的代码可以让您了解查询的运行方式:

def LocationQuery(self):    
    self.SetServer('127.0.0.1', 9312)
    self.SetMatchMode(SPH_MATCH_ALL)    

    self.SetGeoAnchor('latitude','longitude',float(math.radians(self._lat)), float(math.radians(self._lon)))
    self.SetLimits(0,1000)  

    self.SetFilterFloatRange('@geodist',float(0),self._radius,0)
    self.SetSortMode(SPH_SORT_EXTENDED, '@geodist asc')
    self._results = self.Query('loc', GEO_INDEX)
    for match in self._results['matches']:
            attrsdump = ''
            for attr in self._results['attrs']:
                attrname = attr[0]
                attrtype = attr[1]
                val = match['attrs'][attrname]
            self._ids_in_range.append(ProfileResult(match['id'],match['attrs']['@geodist']))
    #for obj in self._ids_in_range:
        #print obj.__repr__()

def DescriptionQuery(self):
    self.ResetFilters()
    self.SetSortMode(SPH_SORT_EXTENDED, 'profileid_attr asc')
    ids = []
    for obj in self._ids_in_range:
        ids.append(obj.profID) 

    self.SetFilter('profileid_attr', ids)
    self._results = self.Query(self._query, DESCRIPTION_INDEX)
    for match in self._results['matches']:
        for id_valid in self._ids_in_range:
            if match['id'] == id_valid.profID:
                self.ResultSet.append(id_valid)
    print 'Description Results: %s' % (len(self._results['matches']))                   
    print 'Total Results: %s' % (self.ResultSet.count())

这些方法将按顺序运行,将找到的 id 保存到对象中。

【问题讨论】:

    标签: python search indexing full-text-search sphinx


    【解决方案1】:

    如果我清楚地了解您,如果您使用纬度和经度属性扩展您的DESCRIPTION_INDEX,它什么时候可以更快地工作。 您将只有一个来描述索引,而不是两个查询。

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 2011-09-05
      • 2019-03-01
      相关资源
      最近更新 更多