• 查询分析
查询的解释方式
查询的解释方式
"hello world" @title "example program"~5 @body python -(php|perl) @* code此搜索的完整含义是:
在文档的任何字段中相邻地查找单词 'hello' 和 'world';
此外,文档还必须包含在 title 字段中的单词 'example' 和 'program',二者之间最多有 4 个单词;(例如,"example PHP program" 会匹配,而 "example script to introduce outside data into the correct context for your program" 不会匹配,因为这两个词之间有 5 个或更多单词)
同时,文档的 body 字段中必须包含单词 'python',并排除 'php' 或 'perl';
最后,文档的任何字段中都必须包含单词 'code'。
OR 操作符的优先级高于 AND,所以 "looking for cat | dog | mouse" 的意思是 "looking for (cat | dog | mouse)",而不是 "(looking for cat) | dog | mouse"。
为了理解查询的执行方式,Manticore Search 提供了查询性能分析工具,以查看由查询表达式生成的查询树。
在 SQL 中分析查询树
要启用 SQL 语句的全文查询性能分析,必须在执行所需查询之前激活它:
SET profiling =1;
SELECT * FROM test WHERE MATCH('@title abc* @body hey');执行查询后,可以使用 SHOW PLAN 命令查看查询树:
SHOW PLAN;此命令将返回执行的查询结构。请记住,SET profiling、查询和 SHOW 必须在同一会话中执行。
在 HTTP JSON 中分析查询
使用 HTTP JSON 协议时,只需启用 "profile":true 即可在响应中获取全文查询树结构。
响应将包含一个 profile 对象,其中包含一个 query 成员。
query 属性持有转换后的全文查询树。每个节点由以下部分组成:
type: 节点类型,可以是 AND、OR、PHRASE、KEYWORD 等。description: 表示此节点的查询子树的字符串(以SHOW PLAN格式显示)。children: 子节点(如果有的话)。max_field_pos: 字段内的最大位置。
关键词节点将额外包含以下内容:
word: 转换后的关键词。querypos: 此关键词在查询中的位置。excluded: 被查询排除的关键词。expanded: 由前缀扩展添加的关键词。field_start: 关键词必须出现在字段的开头。field_end: 关键词必须出现在字段的末尾。boost: 关键词的 IDF 将乘以此值以影响包含 IDF 的排名计算。
SQL:
Python
javascript
java
C#
TypeScript
Go
在某些情况下,由于扩展和其他转换,评估后的查询树可能与原始查询有显著差异。
SQL:
JSON:
PHP:
Python
javascript
java
C#
TypeScript
Go
不执行查询的情况下进行分析
SQL 语句 EXPLAIN QUERY 允许显示给定全文查询的执行树,而无需在表上实际执行搜索查询。
SQL:
EXPLAIN QUERY ... option format=dot 允许以层次结构的格式显示所提供的全文查询的执行树,适用于由现有工具(例如 https://dreampuf.github.io/GraphvizOnline)进行可视化。

SQL:
查看匹配因子的值
在使用表达式排序器时,可以使用 PACKEDFACTORS() 函数显示计算出的因子值。
该函数返回:
文档级因子的值(例如 bm25、field_mask、doc_word_count)
生成命中的每个字段的列表(包括 lcs、hit_count、word_count、sum_idf、min_hit_pos 等)
查询中每个关键词的 tf 和 idf 值列表
这些值可以用来理解为什么某些文档在搜索中得分较高或较低,或者用来优化现有的排名表达式。
示例:
最后更新于