User search for products


#1

Hi all,

I am relatively new to elasticsearch and I want to perform a search for products with brand and type names.
I already tried a bit but I think I am missing something important to have a solid search algorithm.
A product looks e.g. like this:

{
  brandName: "Samsung",
  typeName: "PS-50Q7HX",
  ...
}

I will have a single input field the user can use to search for a brand/type only or for a brand in combination with a type name. E.g.

Samsung | Samsung PS-50Q7HX | PS-50Q7HX

To eliminate misstyping in the typeName field I use an ngram tokenizer which works great when I search for types only. But in combination with the brandName field I get in trouble. Using something like this does not work well (especially when I use an ngram tokenizer on the brandName field too):

{
  "query" : {
    "multi_match" : {
      "query": "Samsung PS 50Q 7HX",
      "type": "cross_fields", 
      "fields": ["brandName", "typeName"]
    }
  }
}

I think the main problem is that I do not know if the user entered a brand name or not and I thought about using a second index filled with all available brands, which I use to perform a "pre-search" for an eventually given brand name in my query string. If I find a match I am able to split the search string by type and brand name and perform a more specific search.

Does this sound like a good approach? Or is there a better way that I do not see at the moment?
Any help is appreciated! :smile:

Thank you very much and best regards,
Stefan

PS: What is about suggestions to prevent misstyping? Someone who already has experiences with this?


(system) #2