# 1.4 Search Syntax

<section id="bkmrk-this-enhancement-is-">This enhancement is only available in KiyoCRM from version 7.11 onwards.

KiyoCRM Elasticsearch engine makes use of Elasticsearch’s *Query String DSL*. This allows very advanced search query to be performed.

For a complete understanding check the [official documentation](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-query-string-query.html#query-string-syntax). A quick overview will be provided here.

## Examples 

Search for all the records having both 'John' and 'Doe' in any field:

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
John AND Doe
```

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div></div>Search for all the records having the first name 'John' (note that this won’t include 'Johnny'):

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
name.first:John
```

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div></div>Search for all the records having with the name starting with 'John':

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
named:John*
```

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div></div>Search for all the Accounts having 'corp' in their name:

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
named:corp AND _type:Accounts
```

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div></div></div><div class="sect1">  
</div></div></div>## Joining 

By default, keywords are joined by OR clauses, meaning that searching for `John Doe` will be the same as searching for `John OR Doe`. Of course, results containing both 'John' and 'Doe' will appear on top.

## Boosting 

Names are boosted, meaning that if one of the keywords matches in the name the record will very likely appear on top.

## Wildcards 

By default the entire keywords must match. Thus, searching with 'John' won’t match someone named 'Johnathan'. To do that you need to use a wildcard character. Can be use interchangeably to replace zero or more characters. `?` can be used to replace exactly one character.

Search for both 'John' and 'Johnathan':

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
named:john*
```

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div></div>Search for all the surnames starting with either 'Mc' or 'Mac':

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
name.last:(Mc* OR Mac*)
```

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div></div>Wildcards can be used at the beginning of the keyword too, but it will make the search slightly slower.

Search for all the records having the last name ending with 'Connor':

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
name.last:*connor
```

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div></div></div><div class="sect1">  
</div></div></div>## Searching by modules 

You can restrict search to one or more module by using the `_type` keyword and the module name.

Search for all the Users:

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
_type:Users
```

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div></div></div><div class="sect1">  
</div></div></div>## Fuzzy search 

Using the `~` will make a keyword fuzzy, meaning that it will make a proximity search, finding all matches that have one different character (distance). The distance can be customized by adding a number after the tilde,

Search for 'Mackenzie', 'McKenzie', 'Makenzie', etc.

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
MacKenzie~3
```

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div></div></div><div class="sect1">  
</div></div></div>## Metadata 

Each records have the following meta fields that can be searched:

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="ulist">- meta.created.date
- meta.created.user\_id
- meta.created.user\_name
- meta.modified.date
- meta.modified.user\_id
- meta.modified.user\_name
- meta.assigned.user\_id
- meta.assigned.user\_name

</div><div class="paragraph">  
</div></div></div></div></div>Search all the records created by 'John Doe':

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
meta.created.user_name:(John Doe)
```

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div></div>Search all the records modified on the first of August.

<div class="padding highlightable sticky-parent"><div><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
meta.modified.date:"2018-08-01"
```

<div id="bkmrk-"></div></section><div id="bkmrk--1"><div>  
</div></div>