Elasticsearch Filters - PullRequest
       1

Elasticsearch Filters

0 голосов
/ 09 января 2019

Я получу входные данные фильтра от внешнего интерфейса через узел js, некоторые могут быть нулевыми или пустыми, но в фильтре запросаasticsearch все поле должно присутствовать. Как получить ответ, даже если входные данные для некоторых фильтров пусты?

 elasticClient.search({
                 index: 'pubmed-index',
                 type: 'pubmed-paper',
                 body: {
                  query: {
                      bool: {
                          must: {
                              match: {
                                  Abstract: `${searchKeyword}`
                              }
                          },
                          filter:
                          {"or":[{
                                  term: 
                                  {
                                  "Publication Type": `${searchPublicationType}`
                                  }},
                              {

                              "range": {
                                "Date Completed": {
                                    "gte" :`${searchGreaterYear}||/y`,
                                    "lte" : `${searchLesserYear}||/y`,
                                    "format" :"yyyy"
                                }
                            }
                          }
                           ]}



                      }
                  }
              }
               }).then(function (resp) {
                   console.log(resp.hits.hits);
                   return res.json(resp.hits.hits)
               }, function (err) {
                   console.log(err.message);
                   return res.json(err.message)
               });

Мне нужен вывод либо для типа публикации, либо для даты завершения, если какое-либо из полей отсутствует

1 Ответ

0 голосов
/ 16 января 2019

Я могу предложить вам посмотреть на шаблон поиска , предоставляемый Elasticsearch.

Он использует усы в качестве языка шаблонов и позволяет иметь, например, условные предложения:

{
  "query": {
    "bool": {
      "must": {
        "match": {
          "line": "{{text}}" 
        }
      },
      "filter": {
        {{#line_no}} 
          "range": {
            "line_no": {
              {{#start}} 
                "gte": "{{start}}" 
                {{#end}},{{/end}} 
              {{/start}} 
              {{#end}} 
                "lte": "{{end}}" 
              {{/end}} 
            }
          }
        {{/line_no}} 
      }
    }
  }
}

и еще несколько опций.

Я использовал его в производстве для аналогичного случая - чтобы пропустить некоторые фильтры, когда пользователь не устанавливает для них никакого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...