Solr长文本搜索无结果求助:短句正常长句返回空
标点符号未被正确处理
你的长查询末尾带了问号?,如果text_pt字段的分词器没配置过滤标点,问号会被当成查询词的一部分。而你索引的文档里没有带问号的内容,自然匹配不到。检查text_pt的字段类型定义,看是否包含PunctuationFilterFactory这类过滤标点的组件。默认查询运算符的影响
Solr默认用AND作为查询运算符,意味着长查询里的每个词都必须在文档中同时出现才会返回结果。短查询只有3个词,容易满足匹配条件;但长句里的quando、posso、pedir、o这类词,如果有部分是停用词,或者文档里没有同时包含所有这些词,就会返回0结果。可以试试把查询改成用OR运算符(比如quando OR posso OR pedir OR o OR subsídio OR de OR parentalidade),验证是不是运算符的问题。停用词过滤配置不一致
text_pt类型一般会包含葡萄牙语停用词过滤器(比如StopFilterFactory),如果索引时停用词被过滤掉,但查询时没过滤(或者反过来),就会导致不匹配。比如o、de是葡萄牙语常见停用词,索引时被去掉了,但查询时如果没过滤,就会要求文档里必须有o这个词,而索引里实际没有,所以匹配失败。检查text_pt的分析链,确保索引和查询阶段的停用词配置一致。查询字段未明确指定
确认搜索时是否明确指定了campo_teste字段。如果默认搜索_text_或其他字段,而你只在campo_teste里索引了数据,长查询就可能因为没指定字段而匹配不到。要确保查询是q=campo_teste:quando posso pedir o subsídio de parentalidade?,而非直接q=...。分词结果不匹配
用Solr的分析页面(Solr Admin -> 选择my_core -> Analysis),把长查询和索引里的对应文档内容分别放进去,查看索引和查询阶段的分词结果是否一致。如果某个词在索引时被分词成其他形式,但查询时的分词结果不一样,就会导致匹配失败。
内容的提问来源于stack exchange,提问作者Miguel

