Elasticsearch实现类Google高级检索

文章转载自:
https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247483914&idx=1&sn=436f81480c2a15af6345183f8eebf16e&chksm=eaa82a22dddfa334c95c3f4bd227c9a78bba20715494b464c5068bc260d9b4320412736fed77&scene=21#wechat_redirect

一、高级检索的功能点

通过高级搜索配置搜索项,能更准确的过滤掉不相干信息,获取最想要的检索信息。

二、高级检索拆分
1、包含以下全部的关键词:

需要分词处理;
若需要指定字段,则使用matchQuery实现;
若无需指定字段的全文检索,则使用queryStringQuery实现;
2、包含以下的完整关键词 :

需要完整匹配字符,使用wildcardQuery结合”*”实现;
3、包含以下任意一个关键词 :

空格分隔每个关键词,需要将多个词空格拆分,然后对每个关键词通过should结合wildcardQuery遍历实现;
4、不包括以下关键词 :

包含以下全部关键词的反面,
若需要指定字段,则使用must_not结合matchQuery实现;
若无需指定字段,则使用must_not结合queryStringQuery实现;
5、限定要搜索的网页的时间是:

限定搜索的开始和结束时间,通过rangeQuery实现。
6、关键词位置:

根据关键词位置的不同,采用不同的实现;
关键词位于title字段:指定title进行检索;
关键词位于content字段:指定content进行检索;
关键词位于全部字段:不指定字段进行检索,多使用 queryStringQuery实现。

三、DSL高级检索实现

    POST detail_index/_search

    {

      "from" : 0,

      "size" : 10,

      "query" : {

        "bool" : {

          "must" : [

            {

              "match" : {

                "title" : {

                  "query" : "苹果乔布斯",

                  "operator" : "OR",

                  "prefix_length" : 0,

                  "max_expansions" : 50,

                  "fuzzy_transpositions" : true,

                  "lenient" : false,

                  "zero_terms_query" : "NONE",

                  "boost" : 1.0

                }

              }

            },

            {

              "wildcard" : {

                "title.keyword" : {

                  "wildcard" : "*苹果总裁库克*",

                  "boost" : 1.0

                }

              }

            },

            {

              "range" : {

                "create_time" : {

                  "from" : "2017-09-07 00:00:00",

                  "to" : "2017-09-15 23:59:59",

                  "include_lower" : true,

                  "include_upper" : true,

                  "boost" : 1.0

                }

              }

            }

          ],

          "must_not" : [

            {

              "wildcard" : {

                "title.keyword" : {

                  "wildcard" : "*苹果梨*",

                  "boost" : 1.0

                }

              }

            }

          ],

          "should" : [

            {

              "wildcard" : {

                "title.keyword" : {

                  "wildcard" : "*苹果手机*",

                  "boost" : 1.0

                }

              }

            },

            {

              "wildcard" : {

                "title.keyword" : {

                  "wildcard" : "*iphoneX*",

                  "boost" : 1.0

                }

              }

            }

          ],

          "disable_coord" : false,

          "adjust_pure_negative" : true,

          "boost" : 1.0

        }

      },

      "_source" : {

        "includes" : [

          "title",

          "content"

      ],

        "excludes" : [ ]

      },

      "highlight" : {

        "pre_tags" : [

          "<span style="color:red">"

        ],

        "post_tags" : [

          "</span>"

        ],

        "fragment_size" : 100,

        "number_of_fragments" : 5,

        "require_field_match" : true,

        "fields" : {

          "title" : { }

      }

      }

    }
原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/12881286.html