共计 3019 个字符,预计需要花费 8 分钟才能阅读完成。
这篇文章主要讲解了“SOLR 查询语法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“SOLR 查询语法有哪些”吧!
一. 基本查询
q – 查询字符串,必须的。
fl – 指定返回那些字段内容,用逗号或空格分隔多个。
start – 返回第一条记录在完整找到结果中的偏移位置,0 开始,一般分页用。
rows – 指定返回结果最多有多少条记录,配合 start 来实现分页。
sort – 排序,格式:sort= field name + desc|asc [, field name + desc|asc]…。示例:(inStock desc, price asc)表示先“inStock”降序, 再“price”升序,默认是相关性降序。
wt – (writer type) 指定输出格式,可以有 xml, json, php, phps, 后面 solr 1.3 增加的,要用通知我们,因为默认没有打开。
fq –(filter query)过虑查询,作用:在 q 查询符合结果中同时是 fq 查询符合的,例如:q=mm fq=date_time:[20081001 TO 20091031],找关键字 mm,并且 date_time 是 20081001 到 20091031 之间的。
q.op – 覆盖 schema.xml 的 defaultOperator(有空格时用”AND”还是用”OR”操作逻辑),一般默认指定
df – 默认的查询字段,一般默认指定
qt –(query type)指定那个类型来处理查询请求,一般不用指定,默认是 standard。
– 排除在要排除的词前加上“-”(不包含”号) 号
其它
indent – 返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试 json,php,phps,ruby 输出才有必要用这个参数。
version – 查询语法的版本,建议不使用它,由服务器指定默认值。
[Solr 的检索运算符]
“:”指定字段查指定值,如返回所有值 *:*²
“?”²表示单个任意字符的通配
“*”表示多个任意字符的通配(不能在检索的项开始使用 * 或者? 符号)²
“~”²表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~ 将找到形如 foam 和 roams 的单词;roam~0.8,检索返回相似度在 0.8 以上的记录。
²邻近检索,如检索相隔 10 个单词的”apache”和”jakarta”,”jakarta apache”~10
“^”²控制相关度检索,如检索 jakarta apache,同时希望去让”jakarta”的相关度更加好,那么在其后加上”^”符号和增量值,即 jakarta^4 apache
布尔操作符 AND、||²
布尔操作符 OR、²
布尔操作符 NOT、!、-²(排除操作符不能单独与项使用构成查询)
“+”存在操作符,要求符号”+”后的项必须在文档相应的域中存在²
() 用于构成子查询²
² [] 包含范围检索,如检索某时间段记录,包含头尾,date:[200707 TO 200710]
{}²不包含范围检索,如检索某时间段记录,不包含头尾
date:{200707 TO 200710}
”转义操作符,特殊字符包括 + – | ! () {} [] ^”~ * ? :“
二. 高亮
hl-highlight,h2=true,表示采用高亮。可以用 h2.fl=field1,field2 来设定高亮显示的字段。
hl.fl: 用空格或逗号隔开的字段列表。要启用某个字段的 highlight 功能,就得保证该字段在 schema 中是 stored。如果该参数未被给出,那么就会高 亮默认字段 standard handler 会用 df 参数,dismax 字段用 qf 参数。你可以使用星号去方便的高亮所有字段。如果你使用了通配符,那么要考虑启用 hl.requiredFieldMatch 选项。
hl.requireFieldMatch:
如果置为 true,除非该字段的查询结果不为空才会被高亮。它的默认值是 false,意味 着它可能匹配某个字段却高亮一个不同的字段。如果 hl.fl 使用了通配符,那么就要启用该参数。尽管如此,如果你的查询是 all 字段(可能是使用 copy-field 指令),那么还是把它设为 false,这样搜索结果能表明哪个字段的查询文本未被找到
hl.usePhraseHighlighter:
如果一个查询中含有短语(引号框起来的)那么会保证一定要完全匹配短语的才会被高亮。
hl.highlightMultiTerm
如果使用通配符和模糊搜索,那么会确保与通配符匹配的 term 会高亮。默认为 false,同时 hl.usePhraseHighlighter 要为 true。
hl.snippets:
这是 highlighted 片段的最大数。默认值为 1,也几乎不会修改。如果某个特定的字段的该值被置为 0(如 f.allText.hl.snippets=0),这就表明该字段被禁用高亮了。你可能在 hl.fl=* 时会这么用。
hl.fragsize:
每个 snippet 返回的最大字符数。默认是 100. 如果为 0,那么该字段不会被 fragmented 且整个字段的值会被返回。大字段时不会这么做。
hl.mergeContiguous:
如果被置为 true,当 snippet 重叠时会 merge 起来。
hl.maxAnalyzedChars:
会搜索高亮的最大字符,默认值为 51200,如果你想禁用,设为 -1
hl.alternateField:
如果没有生成 snippet(没有 terms 匹配),那么使用另一个字段值作为返回。
hl.maxAlternateFieldLength:
如果 hl.alternateField 启用,则有时需要制定 alternateField 的最大字符长度,默认 0 是即没有限制。所以合理的值是应该为
hl.snippets * hl.fragsize 这样返回结果的大小就能保持一致。
hl.formatter: 一个提供可替换的 formatting 算法的扩展点。默认值是 simple,这是目前仅有的选项。
显然这不够用,你可以看看 org.apache.solr.highlight.HtmlFormatter.java 和 solrconfig.xml 中 highlighting 元素是如何配置的。
注意在不论原文中被高亮了什么值的情况下,如预先已存在的 em tags,也不会被转义,所以在有时会导致假的高亮。
hl.fragmenter:
这个是 solr 制 定 fragment 算法的扩展点。gap 是默认值。regex 是另一种选项,这种选项指明 highlight 的边界由一个正则表达式确定。这是一种非典型 的高级选项。为了知道默认设置和 fragmenters (and formatters) 是如何配置的,可以看看 solrconfig.xml 中的 highlight 段。
regex 的 fragmenter 有如下选项:
hl.regex.pattern: 正则表达式的 pattern
hl.regex.slop: 这是 hl.fragsize 能变化以适应正则表达式的因子。默认值是 0.6,意思是如果 hl.fragsize=100 那么 fragment 的大小会从 40-160.
感谢各位的阅读,以上就是“SOLR 查询语法有哪些”的内容了,经过本文的学习后,相信大家对 SOLR 查询语法有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!