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

如何在SOLR查询中使用正则获取指定街道名称结果?

问题描述

我有一组包含街道名称与门牌号的数据集,示例如下:

12 HILL STREET
12A HILL STREET
12B HILL STREET
123 HILL STREET
12 HILARY STREET

执行查询语句 q=(street_name:12\ HILL*) 时,仅返回:

12 HILL STREET

但我期望获取以下结果:

12 HILL STREET
12A HILL STREET
12B HILL STREET

之前尝试过查询语句 q=(street_name:/12[A-Z]\ HILL*/),但没有返回任何结果,请问有没有合适的Solr查询方式实现需求?

可行的Solr查询方案

方案1:短语通配符查询(适配分词字段)

如果street_name是分词存储的字段,直接跨分词的正则会失效,用短语通配符查询可以精准匹配符合格式的记录:

q=(street_name:"12* HILL*")

这个写法会匹配以12开头(包含12、12A、12B)且后续紧跟以HILL开头内容的短语,刚好覆盖你需要的三条结果。

方案2:修正正则查询(针对不分词字段)

如果street_name是string类型(不分词存储),你之前的正则问题出在转义和匹配逻辑上,修正后即可生效:

q=(street_name:/12[A-Z]? HILL.*/)

其中[A-Z]?表示可选的大写字母(匹配12、12A、12B),.*/匹配后续任意内容,能精准筛选目标记录。

方案3:范围+前缀组合查询

针对门牌号做范围匹配,结合街道名前缀查询:

q=(street_name:[12 TO 12C] AND street_name:HILL*)

这个范围会包含12、12A、12B这类格式的门牌号,同时匹配街道名以HILL开头的记录,也能得到预期结果。

关键注意点

  • 先确认street_name的分词器配置:如果用标准分词器,12A会被拆成12和A,HILL STREET拆成HILL和STREET,此时必须用短语查询关联词项,否则跨词的正则或通配符会失效。
  • 优先选择短语通配符查询,相比正则查询性能更优,也更符合Solr的查询逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:25:31