Lucene查询语法中AND和+之间的区别是什么

时间:2015-11-02 14:56:08

标签: java lucene

所以这个查询

http://jthinkws.elasticbeanstalk.com/?type=release&query=artist:(Dinosaur~0.7和Jr.)AND(+轨道:“忘记天鹅”+轨道:“就像天堂一样”)并跟踪:[2到100]和src:1& limit = 100& offset = 0

给出35个结果,而

http://jthinkws.elasticbeanstalk.com/?type=release&query=artist:(Dinosaur~0.7 AND Jr.)AND(轨道:“忘记天鹅”并跟踪:“就像天堂”)并跟踪:[2到100]和src:1& limit = 100& offset = 0

给出2个结果。

在第一种情况下,它似乎返回跟踪字段匹配“忘记天鹅”或“只是谎言天堂”的文档,而第二种情况仅在跟踪字段与两者匹配时返回,因此第一个查询就像在那里一样是两个轨道参数之间的隐式OR,如下所示

http://jthinkws.elasticbeanstalk.com/?type=release&query=artist:(Dinosaur~0.7和Jr.)AND(+轨道:“忘记天鹅”或+轨道:“就像天堂”)并跟踪:[2到100]和src:1& limit = 100& offset = 0

但如果是这样的话+操作符是什么意思?

更新: 我现在想知道问题是否与查询是通过互联网进行以及“+”是否被错误编码有关

1 个答案:

答案 0 :(得分:1)

你是对的,关于需要转义URL中的“+”。就Lucene语法而言,x AND y被查询解析​​器解释为+x +y,因此它们在定义上是相同的。

尝试使用%2B替换加号:

  

http://jthinkws.elasticbeanstalk.com/?type=release&query=artist:(Dinosaur~0.7%20AND%20Jr.)%20AND%20(%2Btrack:%22Forget%20The%20Swan%22%20%2Btrack:%22Just%20Like%20Heaven%22%20)%20AND%20tracks:[2%20TO%20100]%20AND%20src:1&limit=100&offset=0