# How i search firstname + lastname in elasticsearch

**URL:** <https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807>\
**Category:** Elasticsearch\
**Created:** [May 20, 2019, 12:18pm UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807 "2019-05-20T12:18:15Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![arunkvinam](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/arunkvinam/32/43899_2.png) [@arunkvinam](https://discuss.elastic.co/u/arunkvinam)\
**Post date:** [May 20, 2019, 12:18pm UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/1 "2019-05-20T12:18:16Z")

</div>

Hi Team,  
firstname ,middlename and lastname are seperate fields in my index .  
But i can't search firstname + middlename+lastname.  
In mysql I used concat function .But Elasticsearch I do not find any option to do concat fields and search . Please gitve me an option to solve this

---

<div class="post-metadata">

**Author:** ![Mark\_Harwood](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/mark_harwood/32/10538_2.png) [@Mark\_Harwood](https://discuss.elastic.co/u/Mark_Harwood)\
**Post date:** [May 20, 2019, 12:27pm UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/2 "2019-05-20T12:27:19Z")

</div>

Hi Arun,  
The [bool](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html) query is the way to assemble Boolean logic like `A OR B` versus `A AND B`.  
An example Kibana console script below to create and search for multiple fields:

```
DELETE test

POST test/_doc/1
{
  "firstName":"John",
  "lastName":"Smith"
}

GET test/_search
{
  "query": {
	"bool": {
	  "should": [
		{
		  "match": {
			"firstName": "john"
		  }
		},
		{
		  "match": {
			"lastName": "Smith"
		  }
		}
	  ]
	}
  }
}
```

---

<div class="post-metadata">

**Author:** ![arunkvinam](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/arunkvinam/32/43899_2.png) [@arunkvinam](https://discuss.elastic.co/u/arunkvinam)\
**Post date:** [May 20, 2019, 12:39pm UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/3 "2019-05-20T12:39:40Z")

</div>

This is not suitable for me . because I can't get firstname and lastname seperately .  
Get only a text , that is not identify the firstname and lastname.  
That's why iam rejecting this one.  
So Only a solution to concat these fields and search with posting text

---

<div class="post-metadata">

**Author:** ![Mark\_Harwood](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/mark_harwood/32/10538_2.png) [@Mark\_Harwood](https://discuss.elastic.co/u/Mark_Harwood)\
**Post date:** [May 20, 2019, 12:43pm UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/4 "2019-05-20T12:43:45Z")

</div>

> [@arunkvinam](#):
>
> firstname ,middlename and lastname are seperate fields in my index .

> [@arunkvinam](#):
>
> I can't get firstname and lastname seperately .

I'm confused now. Can you share some JSON?

---

<div class="post-metadata">

**Author:** ![whatgeorgemade](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/whatgeorgemade/32/103246_2.png) [@whatgeorgemade](https://discuss.elastic.co/u/whatgeorgemade)\
**Post date:** [May 20, 2019, 1:19pm UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/5 "2019-05-20T13:19:38Z")

</div>

If you've got one thing to search on but you want to search against more than one field, you could use a [multi-match query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html).

---

<div class="post-metadata">

**Author:** ![arunkvinam](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/arunkvinam/32/43899_2.png) [@arunkvinam](https://discuss.elastic.co/u/arunkvinam)\
**Post date:** [May 21, 2019, 7:02am UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/6 "2019-05-21T07:02:29Z")

</div>

my search term is a string . cannot identify firstname , lastname seperately in this string.

So I try to concat firstname +middlename+ lastname fields and execute wildcard query for checking like condition ?  
This is not get right answer .

So What method Iam using for this search condition?

---

<div class="post-metadata">

**Author:** ![Abhilash\_B](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/abhilash_b/32/40270_2.png) [@Abhilash\_B](https://discuss.elastic.co/u/Abhilash_B)\
**Post date:** [May 21, 2019, 7:14am UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/7 "2019-05-21T07:14:19Z")

</div>

Can you share some sample documents in your index?

---

<div class="post-metadata">

**Author:** ![arunkvinam](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/arunkvinam/32/43899_2.png) [@arunkvinam](https://discuss.elastic.co/u/arunkvinam)\
**Post date:** [May 21, 2019, 7:23am UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/9 "2019-05-21T07:23:04Z")

</div>

```
indent preformatted text by 4 spaces

 $params = [
            
    'index' => '142-contact',

            'body' => 

            [
                'settings' => 

                [
                    'number_of_shards' => 3,
                    'number_of_replicas' => 2,
                    "analysis"=>
                    [
                        "normalizer"=>[
                            "lowercase_normalizer"=> [
                                "type"=> "custom",
                                "filter"=> ["lowercase"]
                            ]
                        ]
                    ]
                ],
                'mappings' => [
                    // 'log' => 
                    // [
                        '_source' => [
                            'enabled' => true
                        ],
                        'properties' => 
                        [
                            'appId' => 
                            [
                                'type' => 'long',
                               
                            ],
                            'email' => 
                            [
                                'type' => 'keyword',
                                "doc_values"=> true,
                                "normalizer"=> "lowercase_normalizer"
                            ],
                            'id' => 
                            [
                                'type' => 'text'
                            ],
                            'last_viewed_date_time' => 
                            [
                                'type' => 'date'
                            ],
                            'owner_id' => 
                            [
                                'type' => 'keyword',
                                "doc_values"=> true,
                                "normalizer"=> "lowercase_normalizer"
                            ],
                            'master_record_id' => 
                            [
                                'type' => 'text'
                            ],
            
                            'salutation' => 
                            [
                                'type' => 'keyword',
                                "doc_values"=> true,
                                "normalizer"=> "lowercase_normalizer"
                            ],
                            'firstname' => 
                            [
                                'type' => 'keyword',
                                "doc_values"=> true,
                                "normalizer"=> "lowercase_normalizer"
                            ],
                            'lastname' => 
                            [
                                'type' => 'keyword',
                                "doc_values"=> true,
                                "normalizer"=> "lowercase_normalizer"
                            ],
                            'recordid' => 
                            [
                                'type' => 'long'
                            ]
                        ]
                    //]
                ]
            ]
        ];

         $response = $client->indices()->create($params);
```

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [May 21, 2019, 7:23am UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/10 "2019-05-21T07:23:48Z")

</div>

Could you provide a full recreation script as described in [About the Elasticsearch category](https://discuss.elastic.co/t/about-the-elasticsearch-category/21). It will help to better understand what you are doing. Please, try to keep the example as simple as possible.

A full reproduction script will help readers to understand, reproduce and if needed fix your problem. It will also most likely help to get a faster answer.

---

<div class="post-metadata">

**Author:** ![dojutsu-user](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dojutsu-user/32/46428_2.png) [@dojutsu-user](https://discuss.elastic.co/u/dojutsu-user)\
**Post date:** [May 21, 2019, 7:33am UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/11 "2019-05-21T07:33:37Z")

</div>

Multi Match Query with `type` = `cross_fields` will work.  
Read the docs here - [https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html#type-cross-fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html#type-cross-fields)

---

<div class="post-metadata">

**Author:** ![arunkvinam](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/arunkvinam/32/43899_2.png) [@arunkvinam](https://discuss.elastic.co/u/arunkvinam)\
**Post date:** [May 21, 2019, 7:40am UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/12 "2019-05-21T07:40:53Z")

</div>

Is like query supported in " `cross_fields`" ?.

firstname = "Will"  
lastname="Smith"

GET /\_search  
{  
"query": {  
"multi\_match" : {  
"query": "Will Smith",  
"type": "cross\_fields",  
"fields": ["first\_name", "last\_name"],  
"operator": "and"  
}  
}  
}

this query is working .

But I can search with " Like" condition .

eg :  
GET /\_search  
{  
"query": {  
"multi\_match" : {  
"query": "Will S \* ",  
"type": "cross\_fields",  
"fields": ["first\_name", "last\_name"],  
"operator": "and"  
}  
}  
}

This is not work

---

<div class="post-metadata">

**Author:** ![dojutsu-user](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dojutsu-user/32/46428_2.png) [@dojutsu-user](https://discuss.elastic.co/u/dojutsu-user)\
**Post date:** [May 21, 2019, 7:54am UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/13 "2019-05-21T07:54:40Z")

</div>

Multi Match Query does not support Wildcard Queries. There's another workaround mentioned here - [Multi\_match with Wildcard?](https://discuss.elastic.co/t/multi-match-with-wildcard/144883)

---

<div class="post-metadata">

**Author:** ![Abhilash\_B](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/abhilash_b/32/40270_2.png) [@Abhilash\_B](https://discuss.elastic.co/u/Abhilash_B)\
**Post date:** [May 21, 2019, 8:53am UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/14 "2019-05-21T08:53:14Z")

</div>

Do you have a clear demarkation among the firstname and the lastname fields? Would be good if you can share a sample document, what you've shared above is just the mappings.

---

<div class="post-metadata">

**Author:** ![arunkvinam](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/arunkvinam/32/43899_2.png) [@arunkvinam](https://discuss.elastic.co/u/arunkvinam)\
**Post date:** [May 21, 2019, 8:54am UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/15 "2019-05-21T08:54:37Z")

</div>

Hi

[Multi\_match with Wildcard?](https://discuss.elastic.co/t/multi-match-with-wildcard/144883)

is working , But could not get exact match . fetching so many other data also

eg;-  
In one search term it will work fine

But , search term contain space , it will not work properly

---

<div class="post-metadata">

**Author:** ![arunkvinam](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/arunkvinam/32/43899_2.png) [@arunkvinam](https://discuss.elastic.co/u/arunkvinam)\
**Post date:** [May 21, 2019, 9:02am UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/16 "2019-05-21T09:02:47Z")

</div>

here is an example , what i want

firstname = ''Will"  
lastname = "Smith"

my search term is " Will Sm \*"

How I find above firstname and lastname using this search term.

That is my requirement.

Please give me a solution

---

<div class="post-metadata">

**Author:** ![arunkvinam](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/arunkvinam/32/43899_2.png) [@arunkvinam](https://discuss.elastic.co/u/arunkvinam)\
**Post date:** [May 21, 2019, 9:47am UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/17 "2019-05-21T09:47:44Z")

</div>

Hai

SELECT `salutation`,`firstname`, `lastname` FROM `contact_fields` WHERE CONCAT(`salutation`,`firstname`, `lastname`) like "%Mr.Swapni%"

This is the query iam using in mysql

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [June 18, 2019, 9:47am UTC](https://discuss.elastic.co/t/how-i-search-firstname-lastname-in-elasticsearch/181807/18 "2019-06-18T09:47:52Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
