Как сопоставить несколько слов? - PullRequest
0 голосов
/ 28 мая 2020

У меня работает следующий запрос с подстановочными знаками. Однако иногда у меня есть запрос с несколькими словами, разделенными пробелами (например, «зеленое яблоко», и мне нужно сопоставить записи. Как мне этого добиться?

{
    "query": {
        "bool": {
            "must": [
                {
                    "wildcard": {
                        "name": {
                            "value": "*uni*"
                        }
                    }
                },

1 Ответ

0 голосов
/ 28 мая 2020

Вы можете просто использовать запрос bool must с множественным соответствием для ex:

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "name": "green"
                    }
                },
                {
                    "match": {
                        "name": "apple"
                    }
                }
            ]
        }
    }
}

Теперь, когда вы не указали, давайте рассмотрим два варианта использования

Примеры документов индекса

{
   "name" : "green apple"
}

{
  "name" : "green"
}

{
  "name" : "apple"
}

случай 1: вы хотите, чтобы и зелень, и яблоко присутствовали в name поле

{"запрос": {"bool": {"match": [-> обратите внимание на это {"match": {"name": "green"}}, {"match": {"name": "apple"}}]}} }

Результат поиска содержит только 1 do c

 "hits": [
         {
            "_index": "boolmatch",
            "_type": "_doc",
            "_id": "1",
            "_score": 0.78038335,
            "_source": {
               "name": "green apple"
            }
         }
      ]

случай 2: зеленый или яблочный цвет должны присутствовать в поле имени

{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "name": "green"
                    }
                },
                {
                    "match": {
                        "name": "apple"
                    }
                }
            ]
        }
    }
}

Результат поиска содержит все 3 образца

 "hits": [
      {
        "_index": "boolmatch",
        "_type": "_doc",
        "_id": "1",
        "_score": 0.78038335,
        "_source": {
          "name": "green apple"
        }
      },
      {
        "_index": "boolmatch",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.52354836,
        "_source": {
          "name": "green"
        }
      },
      {
        "_index": "boolmatch",
        "_type": "_doc",
        "_id": "3",
        "_score": 0.52354836,
        "_source": {
          "name": "apple"
        }
      }
    ]
  }
...