如何从solr多个“AND”过滤查询中排除特定的“标签”

时间:2013-07-13 11:13:39

标签: java search solr lucene full-text-search

solr 4.3

这是我的查询请求参数:

<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">15</int>
  <lst name="params">
    <str name="facet">true</str>
    <str name="indent">true</str>
    <str name="q">*:*</str>
    <str name="_">1373713374569</str>
    <arr name="facet.field">
      <str>{!ex=city}CityId</str>
      <str>{!ex=company}CompanyId</str>
    </arr>
    <str name="wt">xml</str>
    <str name="fq">{!tag=city}CityId:729 AND {!tag=company}CompanyId:16122</str>
  </lst>
</lst>

这是查询响应“Facet”的内容:

<lst name="facet_counts">
  <lst name="facet_queries"/>
  <lst name="facet_fields">
    <lst name="CityId">
      <int name="11">100171</int>
      <int name="1404">89406</int>
      <int name="0">77477</int>
      <int name="1366">65780</int>
      <int name="1362">58092</int>
      <int name="729">29213</int>
      <int name="798">28975</int>
               ...
      <int name="7262">808</int>
      <int name="432">776</int>
      <int name="1146">772</int>
      <int name="1653">765</int>
      <int name="1078">668</int>
      <int name="814">667</int>
      <int name="2049">402</int>
      <int name="456">401</int>
      <int name="401">390</int>
    </lst>
    <lst name="CompanyId">
      <int name="16122">971</int>
      <int name="69">0</int>
      <int name="71">0</int>
      <int name="72">0</int>
      <int name="79">0</int>
      <int name="80">0</int>
      <int name="85">0</int>
      <int name="88">0</int>
      <int name="94">0</int>
                ...
      <int name="98">0</int>
      <int name="104">0</int>
      <int name="112">0</int>
      <int name="113">0</int>
      <int name="118">0</int>
      <int name="123">0</int>
      <int name="126">0</int>
      <int name="131">0</int>
      <int name="136">0</int>
      <int name="139">0</int>

    </lst>
  </lst>
  <lst name="facet_dates"/>
  <lst name="facet_ranges"/>
</lst>

你可以看到CityId的“Facet”是正确的,它排除了{! Tag = city} CityId:729查询,但是CompanyId的“Facet”不正确,他不排除{! Tag = company} CompanyId:16122查询。怎么解决?

2 个答案:

答案 0 :(得分:1)

使用:fq = {!tag = city} CityId:729&amp; fq = {!tag = company} CompanyId:16122

答案 1 :(得分:1)

您可以尝试fq=!tag=city}CityId:729&fq={!tag=company}CompanyId:16122作为单独的标记,它们应该作为AND。