В чем разница между фразой и термином в структурированных запросах?

Как phrase и term разные в запросе Structured?

У меня есть эти данные в моем домене CloudSearch:

{
    "guid": 9,
    "operating_systems": [
        "12345", "123"
    ],
    "manufacturer": "sealand",
    "model": "gaming tree whale plum",
    "identifier": "gaming tree whale plum",
    "type": "computer",
    "created_at": "1982-10-14T14:43:54Z"
}

"model" - это тип text, "identifier" - тип literal, "created_at" - тип date.

Сделайте несколько запросов:

(phrase field=model 'tree whale')                match
(phrase field= identifier 'tree whale')          no match
(phrase 'tree whale')                            match
(phrase field=created_at '1982-10-14T14:43:54Z') match (this shouldn't match according to docs)

(term field=model 'tree whale')                match
(term field= identifier 'tree whale')          no match
(term 'tree whale')                            match
(term field=created_at '1982-10-14T14:43:54Z') match

Есть ли что-нибудь, что я могу сделать с phrase, который я не могу сделать с term и наоборот?

Ответ 1

Между синтаксисом и использованием term VS phrase очень мало различий. Тем не менее, поведение поиска при обработке phrases может быть настроено способами terms не может, что может быть использовано для повышения производительности:

  • разрешенные операторы
  • phraseFields
  • phraseSlop

terms предназначены для сопоставления текстовых полей, где phrases предназначены для более сложных поисков.

Пропустите веб-документацию и просто прочитайте весь PDF файл: http://docs.aws.amazon.com/cloudsearch/latest/developerguide/cloudsearch-dg.pdf

Ответ 2

В случае, если кто-то задается вопросом, оказывается, что поиск по фразе соответствует всей фразе, в то время как термин поиск совпадает с терминами, которые могут быть фразой, но могут быть словами, распространяющимися вокруг документа. Пример:

Текст

"model": gaming tree whale plum

Удерживается:

(phrase field=model 'tree whale')                match
(phrase field=model 'tree plum')                 no match

(term field=model 'tree whale')                  match
(term field=model 'tree plum')                   match