• elasticsearch对数组进行搜索


    写在前面

    我们在进行全文建搜的时候往往会添加很多前置条件,比如地区,时间,以及知识点树,我们需要在搜索之前先进行过滤在进行搜索.

    Array索引

    es的数据类型中实际上是不包含数组类型的,在默认的情况下任何字段都可以包含0或者是更多的值,并且全部的值在这个数组中必须保持一致

    In Elasticsearch, there is no dedicated array type. Any field can contain zero or more values by default, however, all values in the array must be of the same datatype. For instance:

    • an array of strings: [ “one”, “two” ]
    • an array of integers: [ 1, 2 ]
    • [ 1, 2, 3 ]
    • an array of objects: [ { “name”: “Mary”, “age”: 12 }, { “name”: “John”, “age”: 10 }]

    NOTE
    如果你想在数组中使用Object的类型,这种情况下是不被允许的,我们如果想使用Object就必须通过设置nested字段来生命这是一个对象数组!!

    我们的映射字段不需要进行任何的配置,在默认的情况下我们就可以使用数组,这是开箱即用的:

    {
      "mappings": {
        "test": {
          "properties": {
            "id": {
              "type": "long"
            },
            "points": {
              "type": "long"
            },
            "stem": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 2048
                }
              },
              "analyzer": "ik_smart"
            },
            "choose": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 2048
                }
              }
            }
          }
        }
      }
    }

    添加一条测试数据

    {
      "id":1,
      "stem":"今天天气真好啊",
      "choose":["诶呀我去","连上了"],
      "points":[23,31,53]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这里我直接指定了几个基本的属性,对同一个字段保存多个值进行测试

    Array搜索

    数组字段的搜索很简单,我们平时遇到的场景也有很多,就像前文中提到的,当我们需要根据多个先决条件进行搜索的时候.
    这里points保存了知识点的数组(有多个值构成),在搜素的时候我们为了保证该试题下包含所有的内容,就是用bool的must进行多个字段的搜索,实例如下:

    {
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "points": {
                  "value": "23"
                }
              }
            },{
              "term": {
                "points": {
                  "value": "31"
                }
              }
            },
            {
              "term": {
                "points": {
                  "value": "53"
                }
              }
            }
          ]
        }
      }
    }
    

    搜索的结果可想而知,所有所有的内容都必须包含上述的三级知识点,如果需要不同级别的知识点,只需要对搜索条件进行调整即可.

      {
        "_index": "test_drup",
        "_type": "test",
        "_id": "1",
        "_score": 3,
        "_source": {
          "id": 1,
          "stem": "今天天气真好啊",
          "choose": [
            "诶呀我去",
            "连上了"
          ],
          "points": [
            23,
            31,
            53
          ]
        }
      }
    
    • 1
    • 索结果只展示一部分

    转载: https://blog.csdn.net/qq_19663899/article/details/84945915

    参考: https://www.cnblogs.com/ljhdo/p/4904430.html

    浪漫家园,没事就来逛逛
  • 相关阅读:
    easy-batch job processors
    easy-batch job marshallers
    easy-batch job mappers
    easy-batch job filters
    easy-batch job writers
    easy-batch job readers
    easy-batch job 报告
    easy-batch job 调度
    easy-batch job 监控
    easy-batch job 配置
  • 原文地址:https://www.cnblogs.com/lovezbs/p/13790685.html
Copyright © 2020-2023  润新知