如何使用Solr在一个查询中获得自动完成和空间搜索?

时间:2011-12-08 07:48:48

标签: autocomplete solr spatial-query

当前功能:

  • 使用solr terms组件,参数terms.prefix自动完成。
  • 地理位置搜索的边界框。

尝试的事情:

  • 我尝试将两个查询合并为一个。但是我从来没有得到按地理位置过滤的结果。 相反,我从terms.prefix搜索中获得了所有内容。
  • 我也尝试过使用dismax,edismax + bbox geo location search。我知道dismax不起作用,因为它没有前缀参数。
  • 我在谷歌日夜看着试图解决这个问题。
  • 我不想在我的字段名称“名称”上使用,因此每个字母都被视为关键字。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

不幸的是,你不能在termscomponent中这样做,因为它根本不支持基于你发布术语组件的其他字段的过滤。

问题的最简单的解决方案是使用标准的requesthandler(即<requestHandler name="standard" class="solr.SearchHandler>)和你的边界框过滤器:

fq={!bbox}&sfield=store&pt=45.15,-93.85&d=5

以及要列出术语的字段(假设您的字段名称为“名称”):

facet=true&facet.field=names&f.names.facet.prefix=$yourprefix$

您最终会得到如下查询:

/select?q=*:*&fq={!bbox}&sfield=store&pt=45.15,-93.85&d=5&facet=true&facet.field=names&f.names.facet.prefix=$yourprefix$

给出如下结果:

<lst name="facet_counts">
  <lst name="facet_queries"/>
    <lst name="facet_fields">
      <lst name="name">
        <int name="maxtor">1</int>
        <int name="memory">1</int>
        <int name="mobile">1</int>
        <int name="mp500">1</int>
        <int name="mb">0</int>
        <int name="mini">0</int>
      </lst>
   </lst>
</lst>

(在小平面部分)