为什么Solr在ExtendedDismaxQParser中的关键字AND和OR被转换为问号?

时间:2017-07-10 15:35:44

标签: solr edismax

我发现当我运行如下的Solr查询时。

q:+fruit +"apple and banana"

ExtendedDismaxQParser正在将其转换为以下内容。 (使用debugQuery标志,我在调试输出中从querystring到parsedquery时能够看到转换。)

+fruit +"apple ? banana"

这显然会改变查询,使单词apple和banana与它们之间的任何单词匹配。不是查询中短语的预期行为。

有没有办法关闭此行为,以便它尊重短语中的单词AND和OR?

以下是JSON调试输出的清理版本。

"rawquerystring":"+(field1:\"apple and health\"^1 field2:\"apple and banana\"^5 field3:\"apple and banana\"^1)", "querystring":"+(field1:\"apple and banana\"^1 field2:\"apple and banana\"^5 field3:\"apple and banana\"^1)", "parsedquery":"(+(PhraseQuery(field1:\"apple ? banana\") PhraseQuery(field2:\"apple ? banana\"^5.0) PhraseQuery(field3:\"apple ? banana\")) (field2:[* TO *]^10.0 hasdescription:y^10.0) FunctionQuery((200.0/(2.0*float(div(ms(const(1499700124562),date(displaydate)),const(84000000)))+20.0))^7.0) FunctionQuery((float(erpm))^0.0) FunctionQuery((200.0/(2.0*float(geodist(latlon(latlong),39.8027,-86.1557))+20.0))^10.0))/no_coord", "parsedquery_toString":"+(field1:\"apple ? banana\" field2:\"apple ? banana\"^5.0 field3:\"apple ? banana\") (field2:[* TO *]^10.0 hasdescription:y^10.0) (200.0/(2.0*float(div(ms(const(1499700124562),date(displaydate)),const(84000000)))+20.0))^7.0 (float(erpm))^0.0 (200.0/(2.0*float(geodist(latlon(latlong),39.8027,-86.1557))+20.0))^10.0", "QParser":"ExtendedDismaxQParser",

1 个答案:

答案 0 :(得分:1)

Edismax与此无关。在您的托管架构中,您必须已配置 StopFilterFactory 过滤器,stopwords.txt包含和/或字样。
由于此过滤器solr不会将这些单词编入索引,因此您无法进行查询。但是solr保留了单词的位置 现在,在您搜索“apple and banana”的情况下。过滤器会将替换为问号,因此您的短语中的字词将保留以匹配solr中的内容。