Фильтр не работает для взвешенного поиска - PullRequest
0 голосов
/ 02 мая 2018

Я довольно новичок в эластичном поиске и не совсем понял его. Итак, у меня есть поиск, результаты которого будут взвешиваться в соответствии с весом их тегов, который работает абсолютно нормально, но позже, когда я ввел фильтр, поиск всегда дает мне пустые результаты. Вот что я попробовал:

{
          "nested": {
            "path": "tags",
            "score_mode": "sum",
            "query": {
              "function_score": {
                "query": {
                  "bool": {
                    "must": [
                      {
                        "match_phrase_prefix": {
                          "tags.tag": "big"
                        }
                      }
                    ],
                    "filter": {
                      "term": {
                        "type.primary": "audio"
                      }
                    }
                  }
                },
                "field_value_factor": {
                  "field": "tags.weight"
                },
                "boost_mode": "multiply",
                "boost": 10
              }
            }
          }
        }

Результат примера с фильтром должен выглядеть примерно так:

{
        "_index": "assets",
        "_type": "Asset",
        "_id": "5a1dc3c0848662ee49e36f43s",
        "_score": 886.8744,
        "_source": {
          "name": "And Action Breakbeat",
          "meta_data": {
            "type": "audio/mp3",
            "file_name": "music_zapsplat_and_action_breakbeat.mp3"
          },
          "file_key": "music_zapsplat_and_action_breakbeat.mp3",
          "src": {
            "url": "https://exapmle.com/music_zapsplat_and_action_breakbeat.mp3"
          },
          "type": {
            "primary": "AUDIO",
            "secondary": "mp3"
          },
          "thumbnail_url": "https://example.com/thumbnail/audio.jpg",
          "tags": [
            {
              "tag": "big",
              "weight": 10
            },
            {
              "tag": "beat",
              "weight": 5
            },
            {
              "tag": "music",
              "weight": 3.3333333333333335
            }
          ],
          "isDeleted": false,
        }
      }

Спасибо!

1 Ответ

0 голосов
/ 02 мая 2018

Нельзя сопоставить type.primary внутри вложенного запроса для tags. Попробуйте вместо этого запрос:

{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "type.primary": "audio"
        }
      },
      "must": [
        {
          "nested": {
            "path": "tags",
            "query": {
              "function_score": {
                "query": {
                  "match_phrase_prefix": {
                    "tags.tag": "big"
                  }
                },
                "field_value_factor": {
                  "field": "tags.weight"
                },
                "score_mode": "sum",
                "boost_mode": "multiply",
                "boost": 10
              }
            }
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...