You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Solr中使用AND运算符链式执行邻近搜索?

Solr多邻近查询的AND组合语法修正

你之前的写法错误在于把Python的逻辑运算符AND直接和f-string拼接,这不符合Python语法,也没有将AND作为Solr查询语法的一部分包含在查询字符串里。正确的做法是把所有查询子句和AND关键字整合为一个完整的字符串,作为q参数的值。

单条件原代码回顾

resp = requests.get('http://localhost:8984/solr/my_index/select', params={
    'q': f'"{q_solr}"~1',  # 单邻近查询(距离1)
    'wt': 'json',
    'rows': 5,
    'start': 0,
    'fl': 'id,org*,score',
})

多条件修正写法

直接拼接版

如果查询词数量固定,可以直接用f-string一次性组合所有子句:

resp = requests.get('http://localhost:8984/solr/my_index/select', params={
    'q': f'"{q_solr}"~1 AND "{X_solr}"~1 AND "{Y_solr}"~1',  # 多邻近查询用AND组合
    'wt': 'json',
    'rows': 5,
    'start': 0,
    'fl': 'id,org*,score',
})

灵活扩展版

如果查询词数量不固定(比如从列表动态获取),可以用join方法生成查询字符串,更易维护:

# 定义所有需要查询的目标词
search_terms = [q_solr, X_solr, Y_solr]
# 生成每个词对应的邻近查询子句,再用AND连接
query_str = ' AND '.join([f'"{term}"~1' for term in search_terms])

resp = requests.get('http://localhost:8984/solr/my_index/select', params={
    'q': query_str,
    'wt': 'json',
    'rows': 5,
    'start': 0,
    'fl': 'id,org*,score',
})

关键说明

  • Solr的查询语法中,AND是查询逻辑关键字,必须作为查询字符串的一部分传递,不能当成Python代码的逻辑运算符使用。
  • 每个邻近查询子句保持"搜索词"~1的格式,多个子句用AND(注意前后空格)分隔,确保Solr能正确解析逻辑关系。

内容的提问来源于stack exchange,提问作者AJW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:08:14