Нужна помощь, чтобы правильно выполнить поиск по шаблону на поле - PullRequest
0 голосов
/ 28 января 2020
Отображение

My sData.Name выглядит следующим образом:

{
    "abc_history": {
        "mappings": {
            "abc-data-type": {
                "sData.Name": {
                    "full_name": "sData.Name",
                    "mapping": {
                        "Name": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

Отображение My sData.startDate выглядит следующим образом

{
    "abc_history": {
        "mappings": {
            "abc-data-type": {
                "sData.startDate": {
                    "full_name": "sData.startDate",
                    "mapping": {
                        "startDate": {
                            "type": "date"
                        }
                    }
                }
            }
        }
    }
}

Я пытаюсь выполнить поиск по шаблону для sData.Name и использовал следующий запрос:

{
  "from": 0, 
  "size": 20, 
        "query": {
          "bool": {
            "must":[
              {"range": {"requestDate": { "gte": "2019-10-01T08:00:00.000Z" }}},
              {
                "wildcard": {
                  "sData.Name": "*Scream*"
                }
              }
            ]
          }
        },
        "sort": [
          { "requestDate": {"order": "desc"}}
        ]
}

Приведенный выше запрос возвращает пустой ответ. Как мне изменить мой запрос, чтобы я мог выполнить wildcard search на sData.Name

Ответ от http://{serverhost}:{port}/abc_history/_search выглядит следующим образом:

{
  "took": 181,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": null,
    "hits": [
      {
        "_index": "abc_history",
        "_type": "abc-data-type",
        "_id": "5e29cbb7965809fe6cb22a7b",
        "_score": null,
        "_source": {
          "sData": [
            {
              "status": "ASSIGNED",
              "Name": "CloudView abcmission Automation Support",
              startDate : "2020-01-26T20:12:57.091Z"

            },
            {
              "status": "RESOLVED",
              "Name": "DSE - Tools Engineering",
              startDate : "2020-01-27T20:12:57.091Z" 
            },
            {
              "status": "CLOSED",
              "Name": "abcmission Orchestration",
              startDate : "2020-01-29T20:12:57.091Z"
            },
            {
              "status": "ASSIGNED",
              "Name": "CloudView abcmission Automation Support",
              startDate : "2020-01-29T20:19:29.687Z"
            }
          ]
        },
        "sort": [
          1579797431366
        ]
      }
    ]
  }
}

Меня в основном беспокоит вопрос sData.Name. Я хочу выполнить поиск только в последнем элементе массива. Так что в моем случае я хочу искать только sData[3].Name Другими словами ключевое слово DSE следует искать в пределах "Name": "CloudView abcmission Automation Support" только

1 Ответ

1 голос
/ 28 января 2020

Я пытаюсь создать индекс по вашим данным. Попробуйте использовать

"wildcard": {
    "sData.Name.keyword": {
    "wildcard": "*DSE*",
        "boost": 1
    }
}


Полный запрос:



PUT /abc_history
{
  "mappings": {
    "abc-data-type": {
      "properties": {
        "sData": {
          "properties": {
            "status": {
              "type": "keyword"
            },
            "Name": {
              "type": "text",
              "fields": {
                     "keyword": {
                          "type": "keyword",
                          "ignore_above": 256
                        }
                }
            }
          }
        }
      }
    }
  }
}


GET /abc_history/_search
{
    "from": 0,
    "size": 200,
    "query": {
        "bool": {
            "filter": [
                {
                    "bool": {
                        "must": [
                            {
                                "wildcard": {
                                    "sData.Name.keyword": {
                                        "wildcard": "*DSE*",
                                        "boost": 1
                                    }
                                }
                            }
                        ],
                        "adjust_pure_negative": true,
                        "boost": 1
                    }
                }
            ],
            "adjust_pure_negative": true,
            "boost": 1
        }
    }
}


Может



GET /abc_history/_search
{
    "from": 0,
    "size": 200,
    "query": {
        "bool": {
            "filter": [
                {
                    "bool": {
                        "must": [
                            {
                                "wildcard": {
                                    "sData.Name": {
                                        "wildcard": "*ddd*",
                                        "boost": 1
                                    }
                                }
                            }
                        ],
                        "adjust_pure_negative": true,
                        "boost": 1
                    }
                }
            ],
            "adjust_pure_negative": true,
            "boost": 1
        }
    },
    "sort": [
        {
            "sData.startDate": {
                "order": "asc"
            }
        }
    ]
}

...