Как увеличить оценку за точное совпадение слова / фразы в упругом поиске? - PullRequest
0 голосов
/ 10 июня 2019

У меня есть индекс с франшизами фильмов, и я бы хотел, чтобы точные совпадения слов / фраз были выше. Например, если я ищу "Star Trek", я хочу, чтобы "Star Trek" набрал наивысший результат (первый результат), за которым следуют "Star Trek Beyond" и "Star Trek Into Darkness". В настоящее время, когда я ищу "Star Trek", я получаю заголовки с дополнительными словами, набравшими больше очков. Это возможно и как?

Также возможно ли получить те же результаты, как описано выше, если вокруг поискового запроса есть некоторый дополнительный несопоставленный текст, например: "(randomText) Star Trek (randomText)"

Вот мои настройки / сопоставления:

{
  "settings": {
    "analysis": {
      "filter": {
        "autocomplete_filter": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 20
        }
      },
      "analyzer": {
        "autocomplete": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "autocomplete_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title_english": {
        "type": "text",
        "fields": {
          "raw": { "type": "keyword" },
          "space": { "type": "text", "analyzer": "whitespace" }
        },
        "analyzer": "autocomplete"
      },
      "title_native": {
        "type": "text",
        "fields": {
          "raw": { "type": "keyword" },
          "space": { "type": "text", "analyzer": "whitespace" }
        },
        "analyzer": "autocomplete"
      },
      "title_romaji": {
        "type": "text",
        "fields": {
          "raw": { "type": "keyword" },
          "space": { "type": "text", "analyzer": "whitespace" }
        },
        "analyzer": "autocomplete"
      },
      "title_synonyms": {
        "type": "text",
        "fields": {
          "raw": { "type": "keyword" },
          "space": { "type": "text", "analyzer": "whitespace" }
        },
        "analyzer": "autocomplete"
      }
    }
  }
}

А вот и мой запрос:

'query': {
    'bool': {
        'must': {
            'multi_match': {
                'query': request.args.get('query'),
                'analyzer': 'standard',
                'fields': ['title_*']
            },
        },
        'should': [{
            'term': {
                'title_*.raw': {
                    'value': request.args.get('query'),
                    'boost': 3
                }
            }
        },
        {
            'prefix': {
                'title_*.raw': {
                    'value': request.args.get('query'),
                    'boost': 2
                }
            }
        }]
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...