Эластичное гнездо с доступом к вложенному свойству текстового типа - PullRequest
0 голосов
/ 14 декабря 2018

Я создал текстовое свойство name Также я создал вспомогательное свойство как words_count имени , и я хочу получить запрос диапазона по слову_count имени.Как я могу получить к нему доступ в C # с помощью Nest.

"mappings": {
"person": {
  "properties": {
    "name": { 
      "type": "text",
      "fields": {
        "keyword": { 
          "type": "keyword"
        },
        "words_count": { 
          "type": "token_count",
          "analyzer": "standard"
        },
        "length": { 
          "type": "token_count",
          "analyzer": "character_analyzer"
        }
      }
    }
  }
}
}

У меня есть длина имени, но это от длины строки c #.Я хочу получить доступ к подсвойству words_count имени, созданного в эластичном.

c# code

Func<QueryContainerDescriptor<MyType>, QueryContainer> query = m => m
                                    .Range(r => r.Field(f => f.name.words_count).Relation(RangeRelation.Within)
                                    .GreaterThanOrEquals(10).LessThanOrEquals(14));

Я хочу заменить f.name.words_count из эластичного гнезда.мне нужно создать класс для имени, имеющего длину свойства.

1 Ответ

0 голосов
/ 02 января 2019

Вам не нужно создавать свойство POCO для сопоставления с multi-field (также часто называемым fields или sub-fields).

Это функциональные возможности, позволяющие индексировать один вход несколькими различными способами, что очень часто встречается в случаях использования поиска.Например, индексирование адреса улицы с помощью нескольких различных типов анализа.

Вы можете использовать метод расширения .Suffix(...) для ссылки на multi-field

Func<QueryContainerDescriptor<MyType>, QueryContainer> query = m => m
    .Range(r => r
        .Field(f => f.name.Suffix("words_count"))
        .Relation(RangeRelation.Within)
        .GreaterThanOrEquals(10)
        .LessThanOrEquals(14)
    );
...