Почему я называю запрос запросом с полем not_analyzed, а es все еще возвращает счет? - PullRequest
0 голосов
/ 12 апреля 2019

Я просто хочу использовать оценку tf-idf в каком-то «проанализированном» поле и использовать «термин» в поле «не_анализ» для сортировки предпочтительных результатов.Но результаты не такие, как я ожидаю.

Согласно официальным документам, поле «not_analyzed» не будет анализироваться, и я считаю, что они не будут рассчитывать баллы по этим полям.Поэтому я хочу воспользоваться этим, чтобы отсортировать то, что я хочу, потому что я хочу использовать оценку tf-idf для определенного поля, чтобы сделать больше вычислений, но оценки меняются, когда я добавляю условие условия.Я пробовал 3 шага: 1. сделать «сопоставить» на анализируемом поле, и этот результат - то, что я хочу 2. объединить «совпадение» и «термин» в поле not_analyzed, но возвращаемый результат немного выше, чем у1-й шаг 3. сделать только «термин» в поле «not_analyzed» и получить результат.

Часть кода была показана ниже, и это 4 записи данных:

data = {"did": 1, "title": "hu la la", "test": [" a "," b "," c "]}

data = {" did ": 2," title ":" hu la "," test ": [" a ","b "," c "]}

data = {" did ": 3," title ":" hu la la "," test ": [" a "," b "]}

data = {"did": 4, "title": "la la", "test": ["a", "b", "c"]}

mappings = {
    "properties": {
        "did": {"type": "long", "index": "not_analyzed"},
        "title": {"type": "string", "index": "analyzed"},
        "test": {"type": "string", "index": "not_analyzed"},
    }
}
curl -X GET http://localhost:9200/test7/_search?pretty=true -d '
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "title": "la"
                    }
                }
            ]
        }
    }
}
'

один из хитов это то, что

{
      "_index" : "test7",
      "_type" : "default",
      "_id" : "AWoRGrIx5vn17yswf0rR",
      "_score" : 0.4203996,
      "_source" : {
        "did" : 1,
        "test" : [ "a", "b", "c" ],
        "title" : "hu la la"
      }

, но когда я добавляю термин

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "title": "la"
                    }
                },
                {
                    "term": {
                        "test": "a"
                    }
                }
            ]
        }
    }
}
'

, его оценка изменилась!

{
      "_index" : "test7",
      "_type" : "default",
      "_id" : "AWoRGrIx5vn17yswf0rR",
      "_score" : 0.7176671,
      "_source" : {
        "did" : 1,
        "test" : [ "a", "b", "c" ],
        "title" : "hu la la"
      }

1 Ответ

1 голос
/ 12 апреля 2019

Для фильтрации результатов следует использовать запрос filter , это не повлияет на оценку.

Пример:

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