在Elasticsearch的multi_match查询中,有两个参数可以帮助您更好地控制匹配的精度和性能:slop和prefix_length。


1、slop:Slop是指允许查询中的搜索词语在文档中以不同的顺序出现并仍然被视为匹配的最大距离。默认情况下,slop值为0,表示查询词语必须按照完全相同的顺序出现。如果您想允许搜索词语以不同的顺序出现,则可以设置slop值

{

  "query": {

    "multi_match": {

      "query": "apple pie",

      "type": "phrase",

      "slop": 2,

      "fields": ["title", "content"]

    }

  }

}

上述查询将搜索"title"和"content"字段中包含“apple pie”的短语,它允许“apple”和“pie”之间最多间隔两个单词

2、prefix_length:Prefix_length是指查询要匹配文本时使用前缀长度进行模糊匹配的字符数。默认情况下,prefix_length值为0,表示没有前缀长度限制。如果您想提高性能并减少可能的匹配结果,请将prefix_length设置为一个数字。例如:

{

  "query": {

    "multi_match": {

      "query": "apple",

      "type": "best_fields",

      "prefix_length": 3,

      "fields": ["title", "content"]

    }

  }

}

上述查询将搜索"title"和"content"字段中包含“appl”或“apple”的文档,它只考虑匹配前3个字符以提高性能并减少不必要的结果。

3、zero_terms_query:Zero_terms_query是指当查询中没有匹配项时使用的策略。默认情况下,zero_terms_query被设置为"none",以便返回空结果集。但是,您可以将其设置为"all",以便返回所有文档作为结果集。例如:

{

  "query": {

    "multi_match": {

      "query": "apple pie",

      "type": "phrase",

      "fields": ["title", "content"],

      "zero_terms_query": "all"

    }

  }

}

在上述查询中,如果没有包含“apple”和“pie”的短语,则会返回所有文档

4、auto_generate_synonyms_phrase_query:auto_generate_synonyms_phrase_query是指是否允许生成同义词短语查询。当搜索包含同义词时,这个选项可以帮助匹配更多的文档。默认情况下,auto_generate_synonyms_phrase_query被设置为false。例如:

{

  "query": {

    "multi_match": {

      "query": "magnifying glass",

      "type": "phrase",

      "fields": ["title", "content"],

      "auto_generate_synonyms_phrase_query": true

    }

  }

}

在上述查询中,如果有一个同义词短语“magnifier”,则它也将被视为匹配项


5、节点

"node.role"是指Elasticsearch集群中节点的角色。其中,每个字母对应的节点角色为:

   C:表示该节点是协调节点,负责协调集群中任务的计划和协调工作。

   D:表示该节点是数据节点,负责存储和管理索引数据。

   H:表示该节点是专用主节点,不存储数据,但负责监督和管理集群。

   I: 表示该节点正在初始化

   L: 表示该节点由于资源分配问题而被锁定

   M:表示该节点是主节点候选人,可被选为集群的主节点。

   R: 表示该节点正在恢复模式下,可能由于故障或重启引起。

   S: 表示此节点安全

   T: 表示在此节点上启用了跟踪

   W: 表示后台运行任务。