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 "*_al*l" 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 [email protected]. 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.
