Как отфильтровать запрос на поиск по элементам в списке - PullRequest
0 голосов
/ 30 сентября 2019

Я выполняю запросasticsearch, но теперь я хочу отфильтровать его, выполнив поиск по значению «result», которое уже определено в документах, от 0 до 6. Значения, по которым я хочу отфильтровать поиск с помощьюнаходятся внутри списка с именем «solution_results» и определяются флажками на веб-сайте, на котором я работаю.

Я попробовал следующий код, но результат запроса, показанного на странице, совершенно не меняется:

    query = {
        "_source": ["title", "raw_text", "i_cite", "cite_me", "relevancia_0", "cdf", "cite_me_semestre", "cdf_grupo", "ramo"],
        "query": {
            "query_string":
            {
                "fields": ["raw_text", "i_cite", "title"],
                "query": termo
            },
            "filter": {
                "bool": {
                    "should": [
                        { "term": {"result": in decision_results}}
                    ]
                }
            }
        },
        "sort": [
            {"relevancia_0": {"order": "desc"}},
            {"_script": {
                "type": "number",
                "script": {
                    "lang": "painless",
                    "source": "Math.round(doc['cdf'].value*1e3)/1.0e3"
                    },
                "order": "desc"}},
            {"cite_me_semestre": {"order": "desc"}},
            {"cite_me": {"order": "desc"}},
            {"date": {"order": "desc"}},
            "_score"
        ],
        "highlight": {
            "fragment_size": 250,
            "number_of_fragments": 1,
            "type": "plain",
            "order": "score",
            "fragmenter": "span",
            "pre_tags": "<span style='background-color: #FFFF00'>",
            "post_tags": "</span>",
            "fields": {"raw_text": {}}
        }
    }

Я ожидаю, что будут возвращены только документы со значением «result», которое находится внутри списка «solution_results»

1 Ответ

0 голосов
/ 30 сентября 2019

Я думаю, вам следует прочитать немного больше о bool запросе ...

, скопировать эту структуру в ваш запрос:

GET _search
{
  "query": {
    "bool": {
      "must": {
        "query_string":
        {
            "fields": ["raw_text", "i_cite", "title"],
            "query": termo
        }
      },
      "filter": {
        "term": {"result": in decision_results}
      }
    }
  }
}

, где ваш основной запросблок находится в блоке «must» запроса bool, а предложение «term» вашего блока фильтра находится в блоке фильтра вашего запроса bool. Не уверен насчет синтаксиса приведенного выше примера, не тестировал, но он должен быть близок к этому.

Кроме того, убедитесь, что ваш веб-сайт правильно обрабатывает ваш "term": {"result": in solution_results} часть. Правильно ли переведен в solution_results в правильный запрос json для вашего термина? Если эта часть является проблемой, вы можете предоставить больше информации о контексте вокруг нее, чтобы мы могли помочь с этим.

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