ElasticSearch: должен ли запрос специально использовать псевдоним суффикса для работы с конкретным полем? - PullRequest
0 голосов
/ 14 февраля 2019

Я немного запутался с использованием полей в Elastic Search.

Нужно ли в запросе конкретно указывать суффикс поля, чтобы ключевое слово / мультиполе вступило в игру?Или текст запроса автоматически проверяется на соответствие настройкам.Проверьте пример сопоставления.Потому что я чувствую, что запросы, которые я выполняю, похоже, не попадают в правильное поле с любым прикладным анализатором, который у меня может быть.

GET /Samples/sample/_search
{       
    "query": {
      "dis_max": {
        "queries": [
          { "match": { "Field1": "alpha" }}
        ]
      }
    },
    "size": 300
} 

или

GET /Samples/sample/_search
{       
    "query": {
      "dis_max": {
        "queries": [
          { "match": { "Field1.raw": "alpha" }}
        ]
      }
    },
    "size": 300
}  

или

GET /Samples/sample/_search
{       
    "query": {
      "dis_max": {
        "queries": [
          { "match": { "Field1.edge": "alpha" }}
        ]
      }
    },
    "size": 300
}  

со следующим отображением:

                 .Mappings(ms => ms
                    .Map<Sample>(m => m
                        .Properties(p => p
                            .Text(s => s
                                .Name(n => n.Field1)
                                .Fields(fs => fs
                                    .Keyword(ss => ss
                                        .Name("raw")
                                    )
                                    .Text(tt => tt
                                      .Name("edge")
                                      .Analyzer("sample_analyzer")
                                    )
                                ) 
                            )
                        )
                  )

1 Ответ

0 голосов
/ 14 февраля 2019

в ваших примерах вы будете выполнять запрос к трем различным полям

  • Field1
  • Field1.raw
  • Field1.edge

соответственно.

Elasticsearch использует только указанные поля (для запросов, требующих указания поля).Стратегия поиска очень часто объединяет несколько запросов по нескольким полям и комбинирует оценки релевантности каким-либо контролируемым образом (например, суммой) для получения общей оценки релевантности.

При использовании NEST .Suffix() позволяетдля нацеливания на несколько полей и все еще использовать лямбда-выражение для строго типизированного доступа вплоть до имени мультиполя, которое не существует в POCO, к которому будут десериализованы документы.

...