использовать match_phrase дважды в фильтре запросов ES? Для [match_phrase] не зарегистрирован фильтр - PullRequest
0 голосов
/ 03 марта 2020

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

В настоящее время я использую ES 1.7 Можно ли дважды использовать match_phrase в фильтре?

пример: документ пользователя q=aaron&address=scarborough - поиск человека по имени и адресу работает нормально.

{
  "query": {
    "match_phrase": {
      "name": "aaron"
    }
  },
  "filter": {
    "bool": {
      "must": {
        "nested": {
          "path": "addresses",
          "query": {
            "match_phrase": {
              "address": "scarborough"
            }
          }
        }
      }
    }
  },

q=aaron&phone=813-689-6889 - поиск человека по имени и номеру телефона также работает нормально.

{
  "query": {
    "match_phrase": {
      "name": "aaron"
    }
  },
  "filter": {
    "bool": {
      "must": {
        "query": {
          "match_phrase": {
            "phone": "813-689-6889"
          }
        }
      }
    }
  }

Однако , Когда я пытаюсь использовать оба фильтра, адрес и телефон, я получаю No filter registered for [match_phrase] ошибку

, например: q=aaron&address=scarborough&phone=813-689-6889

{
  "query": {
    "match_phrase": {
      "name": "aaron"
    }
  },
  "filter": {
    "bool": {
      "must": {
        "nested": {
          "path": "addresses",
          "query": {
            "match_phrase": {
              "address": "scarborough"
            }
          }
        },
        "query": {
          "match_phrase": {
            "phone": "813-689-6889"
          }
        }
      }
    }
  }

ошибка, при использовании address и phone фильтрует вместе:

nested: QueryParsingException[[pl_people] No filter registered for [match_phrase]]; }]","status":400}):

отображение индекса (человек) согласно запросу:

{
  "pl_people": {
    "mappings": {
      "person": {
        "properties": {
          "ac_name": {
            "type": "string",
            "analyzer": "autocomplete"
          },
          "date_of_birth": {
            "type": "date",
            "format": "dateOptionalTime"
          },
          "email": {
            "type": "string"
          },
          "first_name": {
            "type": "string",
            "fields": {
              "na_first_name": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "last_name": {
            "type": "string",
            "fields": {
              "na_last_name": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "middle_name": {
            "type": "string",
            "fields": {
              "na_middle_name": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "name": {
            "type": "string",
            "fields": {
              "na_name": {
                "type": "string",
                "index": "not_analyzed"
              },
              "ngram_name": {
                "type": "string",
                "analyzer": "my_start"
              },
              "ns_name": {
                "type": "string",
                "analyzer": "no_stopwords"
              }
            }
          },
          "phone": {
            "type": "string"
          },
          "time": {
            "type": "date",
            "format": "dateOptionalTime"
          },
          "updated_at": {
            "type": "date",
            "format": "dateOptionalTime"
          }
        }
      }
    }
  }
}

1 Ответ

0 голосов
/ 03 марта 2020

Может быть, вы можете использовать term-filter вместо match_phrase в качестве фильтра.

См. здесь .

...