大多数查询都使用 了标准的Solr语法。这种语法是Solr最常见的,由默认查询解析器负责处理。Solr的默认查询解析器是Lucene查询解析器【LuceneQParserPlugin类实现】。Lucene查询解析器全面支持Lucene语法及Solr的一些专用扩展。
二.Lucene查询解析器语法 1.字段搜索在Solr索引中搜索一个值时,一般来说是在特定字段上进行查找。字段搜索语法是:字段名称+‘:’+搜索内容,举例如下:
title:solr 或 title:"apache solr" request_content_split:(流程 问题) 备注:括号表示集合,用空格隔开每个元素,默认表示OR的含义
尽管关键词搜索不明确指定字段的做法很常见,大需要注意的是,一般在定义的默认字段上进行关键词搜索。举例来说,如果content定义为默认字段【df=content】,则以下两个查询是等价的:
solr 或 content:solr
还需要注意的是,字段和冒号后面的表达式范围必须明确定义。以下两个查询是等价的【假设df=content】,不过在第一个查询中用户可能存在其他意图。
title:apache solr 或 title:apache content:solr
如果在同一个字段中搜索多个词项,使用组合表达式,在字段搜索中指定词项的范围:
title:(apache solr)
如果尝试短语搜索,使用引号【而不是括号】来定义短语范围,尽管这样会导致查询要求短语的所有词项必须同时出现。
title:"apache solr"
2.必备词项【使用较少】为指定一个或多个词项必须出现,使用一元运算符+来连接词项。除非文档包含指定的词项,否则不予匹配。如果匹配的文档必须包含多个词项,使用二元运算符AND或&&,否则对每个词项都使用一元运算符+。
如果默认运算符是AND,在没有指定其他运算符的情况下,每个词项都要求必备。由于每增加一个必备词项都会进一步限制文档集中的结果总数,因此通过使用多个必备词项可以加快查询速度,从而进一步优化结果数量。
3.可选词项相比限制必备字段的做法,扩大匹配的文档数量则适用于另外一些情况。默认运算符是OR,除非有其他指定,否则每个表达式都是可选的。同样地,多个表达式之间使用二元运算符OR或||,这表示匹配的文档中至少包含其中一个词项。
值得注意的是,可选词项越多会导致匹配文档集越大,OR运算比其它布尔运算的执行成本更高。对于关键词搜索,如果内容数量有限,而且希望以牺牲查准率为代价,确保能够返回一些结果【更高的查全率】,那么会考虑使用OR作为默认运算符。由于多个可选词项的文档匹配通常会导致较高的相关度得分,使用OR作为默认运算符并根据相关度得分排名的话,仍然有可能获得搜索结果中最相关的那部分结果。不过,与要求匹配所有关键词不同的是,扩展查询会得到更多一些奇怪的匹配结果。
4.短语搜索【使用较少,且必须使用在使用了分词器的字段上】如果想要匹配彼此相邻的多个词项,使用引号把它们括起来视为一个短语。此查询表达式不能保证匹配出完全一样的文本,被搜索字段可能包含对短语中词项进行修改的分析器。最合理的特定短语搜索不应该匹配无关的短语。短语搜索适用于内容中特定字段和多词名称的处理。
5.组合表达式【常用】为处理任意复杂的布尔子句,Solr使用括号将查询表达式组合在一起。
组合表达式可以设置表达式的上下文,例如,指明在同一个字段中搜索多个单词。组合表达式可以任意嵌套。
6.词项邻近度短语搜索是词项相似度搜索的简化版本。通过添加波浪线和词项位置距离数搜索位置相近的词项,不一定是相邻的。