Поиск с пунктуацией

Я хочу найти слово с пунктуацией в эластичном поиске, например, я хочу найти слово "Пилигрим". Если я наберу "Пилигримы", слово "Пилигрим" должно быть возвращено. Пожалуйста, помогите мне.

Я пробовал разные комбинации анализатора и запроса, но это не работает.

Вот мое отображение

{
  "pbp": {
    "mappings": {
      "_doc": {
        "properties": {
          "business_name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword"
              },
              "numerictext": {
                "type": "text",
                "analyzer": "standard"
              },
              "spot": {
                "type": "text",
                "analyzer": "starstwith_search"
              }
            },
            "analyzer": "autocomplete",
            "search_analyzer": "autocomplete_search"
          },
          "business_setup": {
            "type": "keyword"
          },
          "id": {
            "type": "integer"
          },
          "pbn": {
            "type": "keyword"
          },
          "status": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

Вот параметры запроса в php.

'index' => 'pbp',
'type' => '_doc',
'body' => [
    'highlight' => [
        'pre_tags' => ['<span class="highlight">'],
        'post_tags' => ['</span>'],
        'fields' => [
            'business_name.numerictext' => [
                'type' => 'plain'
            ]
        ]
    ],
    'sort' => [
        'business_name.keyword' => 'asc'
    ],
    'from' => $startPage,
    'size' => $ePageSize,
    'query' => [
        'bool' => [
            'must' => [
                'match' => [
                    'business_name' => [
                        'query' => $keyword,
                        'operator' => 'or',
                        'boost' => 1
                    ]
                ]
            ],
            'must' => [
                'match_phrase_prefix' => [
                    'business_name.spot' => [
                        'query' => $keyword,
                        'max_expansions' => 5,
                        'boost' => 2.0
                    ]
                ]
            ],
            'should' => [
                'match' => [
                    'business_name.numerictext' => [
                        'query' => $keyword,
                        'operator' => 'or',
                        'boost' => 1
                    ]
                ]
            ],
            'must' => [
                'query_string' => [
                    'default_field' => 'business_name.numerictext',
                    'query' => '*'.$keyword.'*',
                    'boost' => 2.0
                ]
            ],
            'should' => [
                'term' => [
                    'status' => 'registered'
                ]
            ]
        ]
    ]
]

0 ответов

Другие вопросы по тегам