Elasticsearch запрос кратчайшего соответствия - PullRequest
0 голосов
/ 26 ноября 2018

Я ищу "AB" в эластичном поиске

результат: "ABB" перед "AB" (оценка ABB> AB)

Я хочу "AB"> "ABB"

{
    'sort': [{'_score': {'order': 'desc'}}],
    'from': _from,
    'size': page_size,
    'query': {
        "multi_match": {
            "query": key,
            "type": "best_fields",
            "fields": ["name^5", "intro"]
        }
    }
}

"mappings": {
    "doc": {
        "properties": {

            "intro": {
                "type": "text",
                "fields": {
                    "keyword": {
                        "ignore_above": 256,
                        "type": "keyword"
                    }
                }
            },
           "name": {
               "type": "text",
               "fields": {
                   "keyword": {
                       "ignore_above": 256,
                       "type": "keyword"
                   }
               }
           },
           "id": {
               "type": "long"
           },
        }
    }
}

Мои данные на китайском

Такие как: имя: 刘佳 вступление: "xxxxxx" имя: 刘佳佳 вступление: "xxxxxx"

1 Ответ

0 голосов
/ 26 ноября 2018

Если в вашем корпусе АББ встречается реже, чем АБ, то у АББ будет лучший результат, так как для оценки по умолчанию используется формула TF / IDF.

Если вы хотите увеличить для поля время запроса в зависимости от длины поля, сначала вам нужно сохранить длину поля в другом поле (используя безболезненно и конвейер или перед индексацией данных).После этого вы сможете использовать функцию function_score_query (см. Здесь функцию коэффициента значения поля ) с модификатором log2p для подсчета длины вашего поля

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