如何在Lucene(SOLR 5.5.0)中搜索包含逗号的文本?
解决Solr 5.5.0中含逗号文本的搜索问题
我之前也踩过这个坑,问题根源在于Lucene的查询语法规则——逗号是默认的多值字段分隔符,你直接写App America, Inc会被解析成两个独立的查询片段,自然匹配不到预期结果。下面给你几个实用的解决办法:
用双引号包裹完整短语
把查询语句改成这样:search?_s=(display_name=="App America, Inc")双引号会强制Lucene把整个内容当作一个完整短语来匹配,不会拆分逗号。如果你的
display_name是不分词的字符串字段,这种方式的精确匹配效果最好。转义逗号字符
如果不想用短语匹配,也可以用反斜杠转义逗号,让它被当作普通文本处理:search?_s=(display_name==App America\, Inc)注意!在URL中发送请求时,反斜杠需要URL编码成
%5C,所以实际可执行的请求应该是:search?_s=(display_name==App America%5C, Inc)这样Solr才能正确识别转义后的逗号,不会把它当作分隔符处理。
检查字段的分词器配置
如果你的display_name字段是被分词的,可能需要调整分词器规则,避免逗号被当作分隔符拆分文本。比如可以把字段设置为纯字符串类型(不分词),在schema.xml里的配置示例如下:<fieldType name="string_exact" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> <field name="display_name" type="string_exact" indexed="true" stored="true"/>这种配置下,字段会完整存储原始文本,配合前面的引号或转义方法,就能精准匹配含逗号的内容了。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

