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

Why does Solr in the ExtendedDismaxQParser the keyword AND and OR are converted to question mark?

我发现当我 运行 一个如下所示的 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",

Edismax 与此无关。在您的托管模式中,您必须配置 StopFilterFactory 过滤器并且 stopwords.txt 包含 and,or 词。
因为这个 Filter solr 不会索引这些词,之后你不能查询。但是solr保留单词的位置。
现在在您搜索 "apple and banana" 的情况下。 Filter会将替换成问号,这样你的短语中的词就会保留下来,以便匹配solr中的内容。