ElasticSearch Autocomplete Feature

Hi All,

I am new to ElasticSearch and currently I am using ElasticSearch to connect
to MongoDB for indexing and searching. I would like to implement keyword
auto-complete feature like search engines which provide a list of
suggestion keyword when user key in partial keywords. I had a document
which contains many fields and I only want the auto-complete keyword to
search on 4 fields (title, description, category and sub-category) . Below
is the index that I am creating:

curl -XPUT http://localhost:9200/testindex -d '
{

  • "settings": {*
  •  "analysis":{*
    
  •      "filter":{*
    
  •          "edge_nGram_filter":{*
    
  •              "type":"edgeNGram",*
    
  •              "min_gram": 1,*
    
  •              "max_gram": 50,*
    
  •              "token_chars": [*
    
  •                  "letter",*
    
  •                  "digit",*
    
  •                  "punctuation",*
    
  •                  "symbol"*
    
  •              ]*
    
  •          }*
    
  •      },*
    
  •      "analyzer": {*
    
  •          "edge_nGram_analyzer": {*
    
  •               "type": "custom",*
    
  •               "tokenizer": "whitespace",*
    
  •               "filter": [*
    
  •                   "lowercase",*
    
  •                   "asciifolding",*
    
  •                   "edge_nGram_filter"*
    
  •               ]*
    
  •          },*
    
  •          "whitespace_analyzer": {*
    
  •              "type": "custom",*
    
  •              "tokenizer": "whitespace",*
    
  •              "filter": [*
    
  •                  "lowercase",*
    
  •                  "asciifolding"*
    
  •              ]*
    
  •          }*
    
  •     }*
    
  •  }*
    
  • },*
  • "mappings" : {*
  •  "Merchant" : {*
    
  •      "_all": {*
    
  •        "index_analyzer": "edge_nGram_analyzer",*
    
  •        "search_analyzer": "whitespace_analyzer"*
    
  •      },*
    
  •      "properties" : {*
    
  •          "screenNm": {*
    
  •              "type": "string",*
    
  •              "index": "no",*
    
  •              "include_in_all": false*
    
  •          },*
    
  •          "categoryId": {*
    
  •                      "type": "long",  *
    
  •                      "index": "no",*
    
  •                      "include_in_all": false*
    
  •          },*
    
  •          "title": {*
    
  •              "type": "string",*
    
  •              "index": "not_analyzed"*
    
  •          },*
    
  •          "desc": {*
    
  •              "type": "string",*
    
  •              "index": "not_analyzed"*
    
  •          },*
    
  •         "email": {                  "type": "string",                
    
    "index": "no", "include_in_all": false },
    "createdAt": { "format": "dateOptionalTime",
    "type": "date", "index": "no",
    "include_in_all": false },
    "subCategoryList": {*
  •              "properties" : {*
    
  •                  "subCategoryId": {*
    
  •                      "type": "long",  *
    
  •                      "index": "no",*
    
  •                      "include_in_all": false*
    
  •                  },*
    
  •                  "subCategory": {*
    
  •                      "type": "string",*
    
  •                      "index": "not_analyzed"*
    
  •                  }*
    
  •              }*
    
  •          },*
    
  •          "category": {*
    
  •              "type": "string",*
    
  •              "index": "not_analyzed"*
    
  •          }*
    
  •      }*
    
  •  }*
    
  • }*
    }'

Below is my questions and I am hoping some of you could shed me some lights:

  1. When I perform match query search on "_all" fields for keyword "food"
    (I had set the returned record size to 6), I will get 6 documents which
    match the *food *keyword in either of the fields (title, description,
    category and sub-category). Result example as the following:

    • title=FoodPandaToyShop, description=Desc1, category=toy,
    sub-category=kids
    • title=Restaurant B, description=Desc2, category=foodcategoryA,
    sub-category=dairy
    • title=Restaurant B, description=Desc3, category= foodcategoryB,
    sub-category=dairy
    • title=Restaurant B, description=Desc4, category= foodcategoryC,
    sub-category=dairy
    • title=Restaurant B, description=Desc5, category= foodcategoryD,
    sub-category=dairy

    So the list of string that we want are FoodPandaToyShop,
    foodcategoryA, foodcategoryB, foodcategoryC, foodcategoryD
    . We need to
    find a way to massage the data because we will received document back from
    ElasticSearch instead of text string. Is there a way to get the text
    instead of the whole document??

  2. Can we perform my scenario using completion suggester?? As I need to
    perform search on multiple fields.

  3. Is performance a issue if I am using edgeNGram on large documents set?

Appreciate your help. Thanks a lot !!!

Regards,
CYea

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/3b2bd828-02c4-4899-a615-2a773b6d671a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.