C # NEST эластичная исходная фильтрация, возвращающая ноль для большинства полей - PullRequest
0 голосов
/ 22 ноября 2018

Я новичок в Elasticsearch с .NET, используя NEST.Я пытаюсь выполнить простой поиск, чтобы соответствовать всем и интересовался только несколькими свойствами.Я не могу получить значения почти для всех полей в источнике.все показывает как нулевое значение

Индекс уже существует вasticsearch.

У меня есть класс, представляющий тип.

public class DocType
{
    public long CommunicationsDate { get; set; }
    public string ControlNumber { get; set; }
    public string Kind { get; set; }
    public string PrimaryCommuncationsName { get; set; }
    public float RiskScore { get; set; }
}

, и мое отображение:

PUT relativity
{
  "mappings": {
    "doctype": {
      "properties": {
        "comms_date": {
          "type": "date"
        },
        "control_number": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "kind": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "primary_comms_name": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "risk_score": {
          "type": "float"
        }
      }
    }
  }
}

Следующий запрос возвращает количество хитов правильно, но значения равны нулю, за исключением свойства Kind.Не уверен, что я делаю не так здесь.Это потому, что имена свойств различаются в классе c # или чем-то еще?

    return await _connection.Get<ElasticClient>().SearchAsync<DocType>(s =>
    {       
        var searchDescriptor = s.Index("relativity")
                                .Type("DocType")
                                .Size(100)
                                .Source(sf => sf
                                    .Includes(i => i
                                        .Fields(
                                            f => f.ControlNumber,
                                            f => f.PrimaryCommuncationsName,
                                            f => f.RiskScore,
                                            f => f.Kind,
                                            f => f.CommunicationsDate
                                        )
                                    )
                                );

    }

1 Ответ

0 голосов
/ 22 ноября 2018

Свойство должно иметь одно и то же имя для того, чтобы вложить, чтобы правильно сопоставить его с индексом es.

Вы можете использовать атрибут в вашем файле класса c #, чтобы изменить сопоставления, если вы хотите иметь другое имя насторона c #.Вы также можете использовать свободное отображение.

https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/attribute-mapping.html

Надеюсь, что это поможет

++

...