Как проиндексировать NotAnalyzed тип поля List <string>? - PullRequest
1 голос
/ 16 апреля 2019
class MyObject{
    public string Name{get;set;}
    public List<string> Tags{get;set;}
}

/*Create mapping */
client.Map<MyObject>(m =>
    m.Properties(props =>
        props.String(s =>
            s.Name(p => p.Name)
            .Path(MultiFieldMappingPath.Full)
            .Index(FieldIndexOption.NotAnalyzed)
            .Fields(f =>
                f.String(ps =>
                    ps.Name(p => p.Name.Suffix("searchable"))
                    .Index(FieldIndexOption.Analyzed)
                )
            )
        )       
    )
);

Как проиндексировать NotAnalyzed для поля Теги того же поля Имя

Я хочу найти только одну фразу в поле Тегов

Пример: Я хочу поиск«эластичный поиск», чтобы выяснить, какой объект содержит именно это слово в поле «Теги»

Obj1:
{
    "Name":"Object 1",
    "Tags":["elastic search","how to code"]
}
Obj2:
{
    "Name":"Object 2",
    "Tags":["elastic","c#"]
}
Obj3:
{
    "Name":"Object 2",
    "Tags":["learn elastic search","learn C#"]
}
===> Result: Obj 1

1 Ответ

0 голосов
/ 16 апреля 2019
Based on your request I will create a test1 index.

    PUT test1/doc/1
    {
      "Name": "Object 1",
      "Tags": [
        "elastic search",
        "how to code"
      ]
    }


    PUT test1/doc/2
    {
        "Name":"Object 2",
        "Tags":["elastic","c#"]
    }

Итак, я напишу запрос, чтобы получить точный термин "эластичный поиск", как вы упомянули в своем примере.

GET test1/doc/_search
        {
          "query": {
            "term": {
              "Tags.keyword": 
               "elastic search"

            }
          }
        }

Таким образом, результат для запроса ниже

curl -XGET "http://localhost:9200/test1/doc/_search"

{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 1,
    "hits": [
      {
        "_index": "test1",
        "_type": "doc",
        "_id": "2",
        "_score": 1,
        "_source": {
          "Name": "Object 2",
          "Tags": [
            "elastic",
            "c#"
          ]
        }
      },
      {
        "_index": "test1",
        "_type": "doc",
        "_id": "1",
        "_score": 1,
        "_source": {
          "Name": "Object 1",
          "Tags": [
            "elastic search",
            "how to code"
          ]
        }
      }
    ]
  }
}

Итак, теперь запрос на выборку документов на основе вашего поля.

curl -XGET "http://localhost:9200/test1/doc/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "term": {
      "Tags.keyword": 
       "elastic search"

    }
  }
}'

И результат

{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.2876821,
    "hits": [
      {
        "_index": "test1",
        "_type": "doc",
        "_id": "1",
        "_score": 0.2876821,
        "_source": {
          "Name": "Object 1",
          "Tags": [
            "elastic search",
            "how to code"
          ]
        }
      }
    ]
  }
}

Надеюсь, это работает. Дайте мне знать, если у вас все еще есть какие-либо проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...