专业的编程技术博客社区

网站首页 > 博客文章 正文

Springcloudalibaba整合es!实现相关性排序,集成完代码真香

baijin 2024-08-26 10:19:39 博客文章 4 ℃ 0 评论

springboot 整合es出现问题:

版本不兼容问题,官方给出一个很详细的图,实际上整合起来还是会报版本不兼容的问题:



版本选型:

SpringBoot

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.6.RELEASE</version>
</parent>

SpringCloudAlibaba

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.3.RELEASE</version>
</dependency>
依赖组件:
 <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-register-center-starter-nacos</artifactId>
            <version>6.10.0</version>
        </dependency>

        <!-- 2.配置中心插件 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-config-center-starter-nacos</artifactId>
            <version>6.10.0</version>
        </dependency>

        <!-- 3.管理中心插件 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-admin-center-starter</artifactId>
            <version>6.10.0</version>
        </dependency>
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-strategy-starter-service</artifactId>
            <version>6.10.0</version>
        </dependency>
    <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>

ElasticSearch

<!-- springboot 整合ES  6.4.3-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <version>2.0.1.RELEASE</version>
</dependency>
<!-- jpa查询包 -->
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
    <version>4.2.2</version>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
    <version>4.2.2</version>
</dependency>
<dependency>
    <groupId>ma.glasnost.orika</groupId>
    <artifactId>orika-core</artifactId>
    <version>1.5.2</version>
</dependency>

相关性排序实现思路原理图:


核心代码实现:

kibana:查询json

{
  "function_score" : {
    "query" : {
      "bool" : {
        "must" : [
          {
            "multi_match" : {
              "query" : "产品描述",
              "fields" : [
                "conent^1.0",
                "title^1.0",
                "version^1.0"
              ],
              "type" : "best_fields",
              "operator" : "OR",
              "slop" : 0,
              "prefix_length" : 0,
              "max_expansions" : 50,
              "zero_terms_query" : "NONE",
              "auto_generate_synonyms_phrase_query" : true,
              "fuzzy_transpositions" : true,
              "boost" : 1.0
            }
          }
        ],
        "filter" : [
          {
            "terms" : {
              "usage_scenarios_type" : [
                "1",
                "12"
              ],
              "boost" : 1.0
            }
          },
          {
            "terms" : {
              "manual_type" : [
                "2",
                "1",
                "4"
              ],
              "boost" : 1.0
            }
          },
          {
            "terms" : {
              "parentId" : [
                "17",
                "12",
                "2"
              ],
              "boost" : 1.0
            }
          }
        ],
        "adjust_pure_negative" : true,
        "boost" : 1.0
      }
    },
    "functions" : [
      {
        "filter" : {
          "bool" : {
            "should" : [
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*17*",
                        "default_field" : "parentId",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 29.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*2*",
                        "default_field" : "manual_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 29.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*1*",
                        "default_field" : "usage_scenarios_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 29.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*12*",
                        "default_field" : "parentId",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 14.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*2*",
                        "default_field" : "manual_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 14.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*1*",
                        "default_field" : "usage_scenarios_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 14.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*12*",
                        "default_field" : "parentId",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 9.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*1*",
                        "default_field" : "manual_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 9.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*1*",
                        "default_field" : "usage_scenarios_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 9.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              }
            ],
            "adjust_pure_negative" : true,
            "boost" : 1.0
          }
        },
        "weight" : 9999.0
      },
      {
        "filter" : {
          "bool" : {
            "should" : [
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*17*",
                        "default_field" : "parentId",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 29.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*2*",
                        "default_field" : "manual_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 29.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*1*",
                        "default_field" : "usage_scenarios_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 29.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*12*",
                        "default_field" : "parentId",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 14.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*2*",
                        "default_field" : "manual_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 14.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*1*",
                        "default_field" : "usage_scenarios_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 14.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*12*",
                        "default_field" : "parentId",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 9.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*1*",
                        "default_field" : "manual_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 9.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*1*",
                        "default_field" : "usage_scenarios_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 9.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              }
            ],
            "adjust_pure_negative" : true,
            "boost" : 1.0
          }
        },
        "weight" : 4999.0
      },
      {
        "filter" : {
          "bool" : {
            "should" : [
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*17*",
                        "default_field" : "parentId",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 29.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*2*",
                        "default_field" : "manual_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 29.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*1*",
                        "default_field" : "usage_scenarios_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 29.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*12*",
                        "default_field" : "parentId",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 14.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*2*",
                        "default_field" : "manual_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 14.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*1*",
                        "default_field" : "usage_scenarios_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 14.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*12*",
                        "default_field" : "parentId",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 9.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*1*",
                        "default_field" : "manual_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 9.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              {
                "bool" : {
                  "must" : [
                    {
                      "query_string" : {
                        "query" : "*1*",
                        "default_field" : "usage_scenarios_type",
                        "fields" : [ ],
                        "type" : "best_fields",
                        "default_operator" : "or",
                        "max_determinized_states" : 10000,
                        "enable_position_increments" : true,
                        "fuzziness" : "AUTO",
                        "fuzzy_prefix_length" : 0,
                        "fuzzy_max_expansions" : 50,
                        "phrase_slop" : 0,
                        "escape" : false,
                        "auto_generate_synonyms_phrase_query" : true,
                        "fuzzy_transpositions" : true,
                        "boost" : 9.0
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              }
            ],
            "adjust_pure_negative" : true,
            "boost" : 1.0
          }
        },
        "weight" : 3332.0
      }
    ],
    "score_mode" : "multiply",
    "max_boost" : 3.4028235E38,
    "boost" : 1.0
  }
}

切面数据埋点:



import com.alibaba.fastjson.JSON;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Date;

@Aspect
@Component
public class DataPointsLogAspect {
    private static final Logger logger = LoggerFactory.getLogger(DataPointsLogAspect.class);

    @Autowired
    public SearchWordsSortDao searchWordsSortDao;

    @Pointcut("@annotation(com.xy.search.annotation.DataPointsLog)")
    public void logPointCut() {
    }

    @Around("logPointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        long beginTime = System.currentTimeMillis();
        // 执行方法
        Object result = point.proceed();
        // 执行时长(毫秒)
        long time = System.currentTimeMillis() - beginTime;
        //异步数据埋点
        dataPoints(point);
        return result;
    }
    /**
     * 数据埋点
     * @param joinPoint
     * @throws InterruptedException
     */
   public void dataPoints(ProceedingJoinPoint joinPoint) throws InterruptedException {
       // 接收到请求,记录请求内容
       ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
       String type = attributes.getRequest().getHeader("type");
       String params = JSONUtils.beanToJson(joinPoint.getArgs()[0]);
        DirectoryDto dto = JSON.parseObject(params,DirectoryDto.class);
        try {
            SearchWordsSortVo vo = new SearchWordsSortVo();
            vo.setSearchWordsName(dto.getName());
            vo.setUserId("用户id");
            vo.setUpdateDate(new Date());
            vo.setLanguageType(type);
            int result = searchWordsSortDao.searchWordsSortFlag(vo);
            if(result>0){
                searchWordsSortDao.updateBySearchCount(vo);
            }else{
                vo.setCreateDate(new Date());
                searchWordsSortDao.save(vo);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Before("logPointCut()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // 记录下请求内容
        logger.info("请求地址 : " + request.getRequestURL().toString());
        logger.info("HTTP METHOD : " + request.getMethod());
        // 获取真实的ip地址
        logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "."
                + joinPoint.getSignature().getName());
        logger.info("参数 : " + Arrays.toString(joinPoint.getArgs()));
    }

    @Around("logPointCut()")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        long startTime = System.currentTimeMillis();
        Object ob = pjp.proceed();// ob 为方法的返回值
        logger.info("耗时 : " + (System.currentTimeMillis() - startTime));
        return ob;
    }
}

索引配置:


PUT manual_chn_dir/_mapping/chndir
{
  "properties": {
    "id": {
	   "type": "text",
	           "analyzer":"ik_smart",
            "search_analyzer":"ik_smart"

    },
    "conent": {
	    "type": "text",
                "analyzer":"ik_smart",
            "search_analyzer":"ik_smart"
    },
    "title": {
     "type": "text",
                 "analyzer":"ik_smart",
            "search_analyzer":"ik_smart"
    },
    "version": {
      "type": "text",
                 "analyzer":"ik_smart",
            "search_analyzer":"ik_smart"
    },
    "parentId": {
      "type": "text",
                "analyzer":"ik_smart",
            "search_analyzer":"ik_smart",
            "fielddata": true
    },
    "manual_info_id": {
      "type": "text",
                "analyzer":"ik_smart",
            "search_analyzer":"ik_smart"
    },
    "manual_id": {
      "type": "text",
                 "analyzer":"ik_smart",
            "search_analyzer":"ik_smart"
    },
    "manual_prent_id": {
      "type": "text",
                "analyzer":"ik_smart",
            "search_analyzer":"ik_smart"
    },
    "usage_scenarios_type": {
       "type": "text",
       "fielddata": true
    },
    "manual_type": {
       "type": "text", 
               "fielddata": true  //设置聚合
    },
    "update_time": {
      "type": "date"

    }
  }
}


//可以配置多个分词


PUT /manual_chn_dir
{
   "settings": {
        "analysis": {
            "analyzer": {
                "ik_smart": {
                    "type": "custom",
                    "tokenizer": "ik_smart"
                },
                "douhao":{
                  "type": "pattern",
                  "pattern":","
                }
            }
        }
  }
  
}

分词器插件:


1,es搜索实现相关性的方式:

数据埋点

第一次搜索实现搜索词,数据埋点写入db.

第2次数据埋点对文档的类型,应用场景,目录分类进行数据埋点。

2 聚合查询(每查询一次先拿到聚合数据集合)

聚合查询数据把 文档的类型,应用场景,目录分类进行聚合成集合,根据

数据埋点的数据库数据获取到,进行优先排序到前面筛选(这里优先filter)

3,通过FunctionScoreQueryBuilder实现分数打分,也是根据数据埋点的数据进行设置boost进行boolQueryBuilder搜索

再次比如boost默认为30,如果我的热词有三条

那么就是 (30-i+1)/i+1 当前设置权重就是(10000-i+1)/i+1,热词的数据也是通过数据库分组查询统计。

总体实现思路:2次数据埋点+bool搜索在filter(优先按数据库的埋点过滤)+FunctionScore+filter+bool搜索实现搜索打分最后可以实现把用户经常看的文档能排到前面。

总结:

如果常规方式无法得到想要的评分结果,则可以脚本方式完全自己实现评分算法,以得到预期的评分结果。

function_score查询是用来控制评分的终极武器,它允许每个与主查询匹配的文档应用一个内置或自定义函数,已达到改变原始查询评分_score的目的。

script_score用于指定自定义脚本。params指定作为变量传递到脚本中的参数。

boost_mode字段用来指定新计算的分数与_score的结合方式,取值可以是:

multiply 相乘

? replace 替换

? sum 相加

? avg 取平均值

? max 取最大值

? min 取最小值

github源码地址:

https://github.com/xyhlw/springcloudalibaba-elasticsearch.git

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表