Фильтр полнотекстового поиска по идентификатору пользователя - PullRequest
0 голосов
/ 15 марта 2019
GET _search
{
  "query": {
    "match": {
      "content": "this test"
    }
  }
}

Это дало мне результат ниже:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 6,
    "successful" : 6,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 3,
    "max_score" : 0.5753642,
    "hits" : [
      {
        "_index" : "inbox",
        "_type" : "mailbox",
        "_id" : "6bb174ab-a4ce-4409-a626-c9a42c98b89e",
        "_score" : 0.5753642,
        "_source" : {
          "user_id" : 13,
          "content" : "This is a test"
        }
      },
      {
        "_index" : "inbox",
        "_type" : "mailbox",
        "_id" : "1304cf2e-a1d4-40ca-9876-9abb08c4474d",
        "_score" : 0.36464313,
        "_source" : {
          "user_id" : 10,
          "content" : "This is a test"
        }
      },
      {
        "_index" : "inbox",
        "_type" : "mailbox",
        "_id" : "623c093c-4408-445e-abb1-460d2c5004cd",
        "_score" : 0.36464313,
        "_source" : {
          "user_id" : 15,
          "content" : "This is a test"
        }
      }
    ]
  }
}

Что хорошо. Однако мне нужно отфильтровать их по user_id. Я имею в виду, что мне нужно оценивать только конкретного пользователя и его содержание.

GET _search
{
  "query": {
    "match": {
      "content": "this test",
      "user_id": 10
    }
  }
}

Когда я добавляю user_id, я получаю эту ошибку:

{
  "error": {
    "root_cause": [
      {
        "type": "parsing_exception",
        "reason": "[match] query doesn't support multiple fields, found [content] and [user_id]",
        "line": 5,
        "col": 18
      }
    ],
    "type": "parsing_exception",
    "reason": "[match] query doesn't support multiple fields, found [content] and [user_id]",
    "line": 5,
    "col": 18
  },
  "status": 400
}

Почему? И как правильно фильтровать на основе user_id?

Ответы [ 3 ]

1 голос
/ 15 марта 2019

Используйте запрос bool для объединения фильтров

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "content": "this is content"
          }
        },
        {
          "term": {
            "user_id": {
              "value": 47545
            }
          }
        }
      ]
    }
  }
}
1 голос
/ 15 марта 2019

Вы можете использовать term query , чтобы отфильтровать результат по user_id.

Обновите ваш запрос следующим образом:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "content": "this test"
          }
        }
      ],
      "filter": [
        {
          "term": {
            "user_id": 10
          }
        }
      ]
    }
  }
}
1 голос
/ 15 марта 2019

Запрос должен быть таким:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "content": "this test"
          }
        },
        {
          "match": {
            "user_id": 10
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...