Окно поиска автозаполнения, например flipkart / OLX / Udaan, использует Elasticsearch 7.3 в приложении php - PullRequest
0 голосов
/ 24 сентября 2019

Я хочу создать секретный портал, где я использую Elasticsearch 7.3 для хранения данных о продукте, чтобы я мог быстро получать результаты поиска в списке и выполнять автозаполнение.Я хочу получить результат, как у флипкарта или олкса.например, «холодильник в Ac» или «Джинсы для мужчин», «Джинсы для женщин», «Джинсы в левисе».Согласно моему исследованию эластичного поиска, я сначала создал индекс с помощью Analyzer и соответственно установил Mapper для полей.Ниже приведен мой анализатор и фрагмент кода.

Я использую PHP 5.6 с Elasticsearch 7.3 на Ubuntu 16.03

Анализатор и создаю индекс:

PUT testmitesh
{
   "settings": {
      "analysis": {
         "filter": {
            "english_poss_stemmer": {
                "type": "stemmer",
                "name": "possessive_english"
            },
         "edgeNGram_filter": {
               "type": "edgeNGram",
               "min_gram": 2,
               "max_gram": 25,
               "side" : "front",
               "token_chars": ["letter", "digit"]
            },
            "shingle": {
              "type": "shingle",
              "min_shingle_size": 2,
              "max_shingle_size": 5,
              "output_unigrams":false
          }
         },
         "analyzer": {
            "edge_nGram_analyzer": {
               "type": "custom",
               "tokenizer": "edge_ngram_tokenizer",
               "filter": [
                  "lowercase",
                  "trim",
                  "asciifolding",
                  "edgeNGram_filter",
                  "shingle",
                  "english_poss_stemmer"
               ]
            },
            "whitespace_analyzer": {
               "type": "custom",
               "tokenizer": "whitespace",
               "filter": [
                  "lowercase",
                  "asciifolding",
                  "trim"
               ]
            },
            "keyword_analyzer": {
              "filter": ["lowercase", "english_poss_stemmer","trim"],
              "tokenizer": "keyword"
            },
            "standard_analyzer": {
              "tokenizer" : "standard"
            },
            "starts_with": {
                  "tokenizer": "edge_ngram_tokenizer",
                  "filter": [ "lowercase" ]
            }
         },
          "tokenizer" : {
              "edge_ngram_tokenizer" : {
                  "type" : "edgeNGram",
                  "min_gram" : "2",
                  "max_gram" : "25",
                  "token_chars": [ "letter", "digit" ]
              }
          }
      }
   }
}

Отображение:

    POST testmitesh/_mapping
    {
  "properties":{
         "product_name":{
            "type":"text",
            "fields":{
               "raw":{
                  "type":"keyword",
                  "ignore_above":256
               },
               "keyword_analyzer":{
                  "type":"keyword",
                  "ignore_above":256
               },
               "starts_with": {
                    "type": "text",
                    "analyzer": "starts_with",
                    "search_analyzer": "whitespace_analyzer"
                },
               "edge_nGram_analyzer":{
                  "type":"text",
                  "analyzer" : "whitespace_analyzer"
               }
            },
            "analyzer":"edge_nGram_analyzer",
            "search_analyzer": "standard_analyzer"

         },
        "product_description":{
            "type": "text",
            "analyzer": "standard_analyzer",
            "fields": {
                "starts_with": {
                    "type": "text",
                    "analyzer": "starts_with",
                    "search_analyzer": "standard_analyzer"
                },
                "edge_nGram_analyzer": {
                    "type": "text",
                    "analyzer": "edge_nGram_analyzer"
                }
            }
          },
         "product_category_name":{
            "type":"text",
            "fields":{
               "raw":{
                  "type":"keyword",
                  "ignore_above":256
               },
              "starts_with": {
                  "type": "text",
                  "analyzer": "starts_with",
                  "search_analyzer": "whitespace_analyzer"
              }
            },
            "analyzer":"edge_nGram_analyzer",
            "search_analyzer": "standard_analyzer"
         },
         "product_sub_category_name":{
            "type":"text",
            "fields":{
               "raw":{
                  "type":"keyword",
                  "ignore_above":256
               }
            },
            "analyzer":"edge_nGram_analyzer",
            "search_analyzer": "standard_analyzer"
         }
      }
   }

Вот мой пример продукта json:

{
    "_index" : "testmitesh",
    "_type" : "_doc",
    "_id" : "5d7b3752842ed900077ae5a5",
    "_score" : 1.0,
    "_source" : {
      "product_name" : "samsung 275 l frost free double door refridgerator",
      "product_price" : 23790,
      "product_description" : "275 L : Good for families of 3-5 members\r\nDigital Inverter Compressor : Consumes lower electricity in comparison to a Normal compressor\r\n3 Star : For Energy savings up to 35%\r\nFrost Free : Auto fridge defrost to stop ice-build up",
      "product_fridge_brands" : "Samsung",
      "product_rating" : "3 star",
      "product_door_type_other" : "",
      "product_door_type" : "Double door",
     "product_working_condition" : "good",
      "product_about_delivery" : [
        "self delivery by seller"
      ],
      "product_extra_details" : "Bring home this 275 L double-door refrigerator from Samsung and increase the shelf life of all your ",
      "product_category_name" : "Electronics",
      "product_sub_category_name" : "Refridgerator",
      }
  },
  {
    "_index" : "testmitesh",
    "_type" : "_doc",
    "_id" : "5d7b3fd9842ed900077ae5b0",
    "_score" : 1.0,
    "_source" : {
      "product_name" : "lg 2 ton 3 star split dual inverter ac - black",
      "product_price" : 47999,
      "product_description" : "2 Ton : Great for large sized rooms (150-200 sq ft)\r\n3 Star BEE Rating 2018 : For energy savings upto 15% (compared to Non-Inverter 1 Star)\r\nAuto Restart: No need to manually reset the settings post power-cut\r\nCopper : Energy efficient, best in class cooling with easy maintenance.\r\nSleep Mode: Auto-adjusts the temperature to ensure comfort during your sleep",
      "product_a_c_brands" : "LG",
      "product_rating" : "4 star",
      "product_capacity" : "1.5",
      "product_inverter_technology" : "yes",
      "product_cooling_technology" : "Auto Air Swing",
      "product_how_old_it_is" : "1",
      "product_working_condition" : "excellent",
      "product_about_delivery" : [
        "self delivery by seller"
      ],
      "product_extra_details" : "KS-Q24ENXA, Copper Condenser",
      "product_category_name" : "Electronics",
      "product_sub_category_name" : "A.c",
       }
  },
  {
    "_index" : "testmitesh",
    "_type" : "_doc",
    "_id" : "5d7b36e2842ed900077ae5a4",
    "_score" : 1.0,
    "_source" : {
      "product_name" : "direct cool single door 3 star refrigerator ",
      "product_price" : 13456,
      "product_description" : "190 L : Good for couples and small families\r\nReciprocatory Compressor : Standard type of Compressor with Easy Maintenance\r\n3 Star : For Energy savings up to 35%\r\n\r\nWhirlpool presents this 190 L Direct Cool Single Door Refrigerator to keep your food fresh and beverages cold even during long hours of power cuts. This kitchen appliance features Whirlpool’s 6th Sense QuickChill Technology and Stabilizer-free Operation for effective and efficient cooling.",
      "product_fridge_brands" : "Whirlpool",
      "product_rating" : "5 star",
      "product_door_type_other" : "",
      "product_door_type" : "single door",
      "product_working_condition" : "excellent",
      "product_about_delivery" : [
        "self delivery by seller"
      ],
      "product_extra_details" : "Whirlpool presents this 190 L Direct Cool Single Door Refrigerator to keep your food fresh and bever",
      "product_category_name" : "Electronics",
      "product_sub_category_name" : "Refridgerator",
      }
  },
  {
    "_index" : "testmitesh",
    "_type" : "_doc",
    "_id" : "5d7b3809842ed900077ae5a6",
    "_score" : 1.0,
    "_source" : {
      "product_name" : "haier hcf-175htq freezer chest",
      "product_price" : 29000,
      "product_description" : "1 Deep Freezer, 1 Basket, User Manual\r\nExcellent product and spacious. Best is it is a freezer also with a feature of refrigeration. So you can change temp from knob placed below outside the deepfreezer. Good for chilling beers.",
      "product_fridge_brands" : "Haier LG",
      "product_door_type" : "Side by side",
      "product_working_condition" : "poor",
      "product_about_delivery" : [
        "self delivery by seller"
      ],
      "product_extra_details" : "",
      "product_category_name" : "Electronics",
      "product_sub_category_name" : "Refridgerator",
      }
  }

Может кто-нибудь направить меня сюда, пожалуйста?Как я могу достичь своих требований?Что-нибудь, я должен изменить в моем анализаторе?Как инициировать поисковый запрос для автозаполнения результата, как я уже упоминал выше?так что если в строке поиска я наберу 'Fr' или 'fridge' или 'freeze' или 'frige', я должен получить все результаты, исправив опечатку автоматически и перечислив все результаты.

...