• ES 操作


    1、删除索引的所有记录

    1. curl -X POST "localhost:9200//_delete_by_query" -H 'Content-Type: application/json' -d'
    2. {
    3. "query": {
    4. "match_all": {}
    5. }
    6. }
    7. '

    POST /content_erp_nlp_help/_delete_by_query
    {

      "query": {

        "match_all": {}

      }

    }

    2、创建索引模板

    PUT _template/content_erp_nlp_help
    {
      "index_patterns": [
        "content_vector*"
      ],
      "settings": {
        "analysis": {
          "analyzer": {
            "my_ik_analyzer": {
              "type": "ik_smart"
            }
          }
        },
        "number_of_shards": 1
      },
      "mappings": {
        "properties": {
          "id": {
            "type": "long"
          },
          "content": {
            "type": "text",
            "analyzer": "ik_max_word",
            "search_analyzer": "ik_smart"
          },
          "content_vector": {
            "type": "dense_vector",
            "similarity": "cosine",
            "index": true,
            "dims": 768,
            "element_type": "float",
            "index_options": {
              "type": "hnsw",
              "m": 16,
              "ef_construction": 128
            }
          },
          "content_answer": {
            "type": "text",
            "analyzer": "ik_max_word",
            "search_analyzer": "ik_smart"
          },
          "title": {
            "type": "text",
            "analyzer": "ik_max_word",
            "search_analyzer": "ik_smart"
          },
          "param": {
            "type": "text",
            "analyzer": "ik_max_word",
            "search_analyzer": "ik_smart"
          },
          "type": {
            "type": "text",
            "analyzer": "ik_max_word",
            "search_analyzer": "ik_smart"
          }
        }
      }
    }
     

    3

    使用must还是should在布尔查询中取决于你的具体需求和期望的查询行为。

    使用 must

    当你使用must时,所有包含在must列表中的子查询都必须匹配。这意味着,为了使文档成为搜索结果的一部分,文档必须同时满足所有must查询的条件。如果你的意图是找到同时与文本查询和KNN向量查询匹配的文档,那么使用must是合适的。这通常用于要求严格的匹配场景,比如需要文档同时具有特定的文本特征和与某向量相近。

    使用 should

    相比之下,should表示查询中的任意子查询匹配即可。如果至少有一个should子查询匹配,那么文档就会被视为匹配。这提供了更大的灵活性,意味着即使文档只满足文本查询或KNN查询中的一个,它也可能出现在结果中。这对于希望扩大搜索范围,或者允许部分条件匹配的情况非常有用。

    效果比较

    • 精确性 vs. 宽泛性must查询倾向于提供更精确的结果集,因为所有条件都必须满足。而should查询可能产生更宽泛的结果,因为它允许部分条件匹配。
    • 性能影响: 在某些情况下,使用should可能会导致更多的文档被扫描和评估,从而可能略微降低查询性能。这是因为Elasticsearch需要检查每个should子查询是否匹配。

    混合使用 must 和 should

    在很多情况下,混合使用mustshould可以达到最佳的效果。例如,你可以定义一些硬性条件作为must,确保结果至少满足这些核心需求,同时使用should来增加结果的丰富度和多样性,如:

     
    

    Java

    1. 1BoolQuery boolQuery = new BoolQuery.Builder()
    2. 2 .must(matchQuery) // 必须满足的文本匹配
    3. 3 .should(knnQuery) // 可以满足的向量相似性
    4. 4 .build();

    在这个例子中,所有结果必须与文本查询匹配,但如果文档还与KNN查询匹配,则会获得更高的相关性评分,从而可能在结果中排名更高。

    总结

    选择使用must还是should主要取决于你的业务逻辑和你对查询结果的期望。如果你需要严格的匹配条件,使用must;如果你希望结果更加宽泛和多样化,使用should;如果你需要两者之间的平衡,考虑混合使用两者。

  • 相关阅读:
    (Java高级教程)第五章Linux使用和程序部署-第一节:Linux基本介绍和云服务器使用
    vant 的 Cascader 级联选择 组建css样式错乱问题修复
    数组 vector
    jenkins自动化工具简介
    SEAL 0.3 正式发布:国内首个全链路软件供应链安全管理平台
    Unity学习——坐标系
    Python爬虫如何设置代理服务器(搭建代理服务器教程)
    音视频录制器—打包数据流
    gRPC 自定义负载均衡算法
    Java SE 9 多版本兼容 JAR 包示例
  • 原文地址:https://blog.csdn.net/wangqiaowq/article/details/139641244