Как мне запросить у сервера ES предложить целую фразу, НО, принимая во внимание каждое слово в поисковой фразе? - PullRequest
0 голосов
/ 01 ноября 2018

Ubuntu 16.04
Эластичная поисковая версия 6.4.0

У меня есть документ со следующей структурой:

{
  "items": {
    "mappings": {
      "item": {
        "properties": {
          "name": {
            "type": "text",
            "boost": 1.6
          },
          "color": {
            "type": "text",
            "boost": 1.4
          },
          "year": {
            "type": "text",
            "boost": 1.5
          },
          "condition": {
            "type": "text",
            "boost": 1.6
          },
          "description": {
            "type": "text",
            "boost": 1.1
          },
          "suggest": {
            "type": "completion",
            "analyzer": "standard",
            "preserve_separators": true,
            "preserve_position_increments": true,
            "max_input_length": 50,
            "contexts": [
              {
                "name": "name",
                "type": "category",
                "path": "name"
              },
              {
                "name": "color",
                "type": "category",
                "path": "color"
              },
              {
                "name": "year",
                "type": "category",
                "path": "year"
              }
            ]
          }
        }
      }
    }
  }
}  

Как запросить у сервера ES предложение всей фразы, НО, учитывая каждое слово в поисковой фразе?

Например, если я ищу «bike re», я должен получить предложения, такие как «red 2014» и / или «red 2016» - если он, конечно, существует.

Вот что я придумал (пример запроса _search). Или, по крайней мере, как я себе это представлял. Допустим, я набираю "велосипед ре". Итак, на бэкенде я бы разбил все строки на строчные и строчные буквы и искал что-то вроде:

{
  "suggest": {
    "suggest": {
      "prefix": "bike re",
      "completion": {
        "field": "suggest",
        "skip_duplicates": true,
        "size": 15,
        "contexts": {
          "name": [
            "bike",
            "re"
          ],
          "year": [
            "bike",
            "re"
          ]
        }
      }
    }
  }
}

Но, конечно, это ничего не вернет, так как контексты не совпадают, и нет предлагаемого термина "бай-ре", А также это означает, что мне нужно создать большое количество контекстов (и предложить исходные данные) для каждого элемента, и они должны быть точными словами. Есть ли другой способ?

Может ли это быть лучше при нечетком поиске?

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