Problem getting text search hits

Hello,

I'm currently trying to implement my first search using Elasticsearch in Pimcore but am having issues getting hits on text strings. I'm currently using the Kibana dev tools to perform my search so Pimcore is only used for indexing data at the moment.

The index itself was set up like this by the Pimcore bundle:

{
  "advanced_object_search_product" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "localizedfields" : {
          "type" : "nested",
          "properties" : {
            "en" : {
              "type" : "nested",
              "properties" : {
                "description" : {
                  "properties" : {
                    "notInherited" : {
                      "type" : "text",
                      "fields" : {
                        "raw" : {
                          "type" : "text"
                        }
                      }
                    },
                    "standard" : {
                      "type" : "text",
                      "fields" : {
                        "raw" : {
                          "type" : "text"
                        }
                      }
                    }
                  }
                },
                "name" : {
                  "properties" : {
                    "notInherited" : {
                      "type" : "text",
                      "fields" : {
                        "raw" : {
                          "type" : "keyword"
                        }
                      }
                    },
                    "standard" : {
                      "type" : "text",
                      "fields" : {
                        "raw" : {
                          "type" : "keyword"
                        }
                      }
                    }
                  }
                },
                "shortdescription" : {
                  "properties" : {
                    "notInherited" : {
                      "type" : "text",
                      "fields" : {
                        "raw" : {
                          "type" : "keyword"
                        }
                      }
                    },
                    "standard" : {
                      "type" : "text",
                      "fields" : {
                        "raw" : {
                          "type" : "keyword"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "o_checksum" : {
          "type" : "long"
        },
        "o_creationDate" : {
          "type" : "date"
        },
        "o_id" : {
          "type" : "long"
        },
        "o_modificationDate" : {
          "type" : "date"
        },
        "o_published" : {
          "type" : "boolean"
        },
        "o_type" : {
          "type" : "keyword"
        },
        "path" : {
          "type" : "keyword"
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "mapping" : {
          "nested_fields" : {
            "limit" : "200"
          },
          "total_fields" : {
            "limit" : "100000"
          }
        },
        "number_of_shards" : "5",
        "provided_name" : "advanced_object_search_product",
        "creation_date" : "1636036103254",
        "number_of_replicas" : "0",
        "uuid" : "QXR2V8N5RiCq5bQqXIkb1w",
        "version" : {
          "created" : "7120099"
        }
      }
    }
  }
}

I've set up a product that I want to be able to find using the search and it looks like this:

{
  "took" : 10,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 16.93538,
    "hits" : [
      {
        "_index" : "advanced_object_search_product",
        "_type" : "_doc",
        "_id" : "24875",
        "_score" : 16.93538,
        "_source" : {
          "o_id" : 24875,
          "o_creationDate" : "2021-11-08T07:24:19+0000",
          "o_modificationDate" : "2021-11-08T07:28:07+0000",
          "o_published" : true,
          "o_type" : "object",
          "type" : "Product",
          "key" : "lorem-ipsum",
          "path" : "/Products/Categories/appliceringstape/appliceringstape_oratape/",
          "localizedfields" : {
            "en" : {
              "name" : {
                "standard" : "Lorem Ipsum",
                "notInherited" : "Lorem Ipsum"
              },
              "shortdescription" : {
                "standard" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas maximus justo velit, non mollis ante tempor at. Aliquam massa leo, tempor eu aliquam ultrices, bibendum et elit. Pellentesque in nunc ut dui ultricies malesuada quis non arcu. Sed vitae pharetra magna. Phasellus ornare porttitor lectus, eu tincidunt ligula lobortis viverra. Fusce pharetra placerat massa, eu pulvinar ipsum pellentesque id. Duis sed molestie nisi. Curabitur ultrices placerat malesuada.",
                "notInherited" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas maximus justo velit, non mollis ante tempor at. Aliquam massa leo, tempor eu aliquam ultrices, bibendum et elit. Pellentesque in nunc ut dui ultricies malesuada quis non arcu. Sed vitae pharetra magna. Phasellus ornare porttitor lectus, eu tincidunt ligula lobortis viverra. Fusce pharetra placerat massa, eu pulvinar ipsum pellentesque id. Duis sed molestie nisi. Curabitur ultrices placerat malesuada."
              },
              "description" : {
                "standard" : """Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas maximus justo velit, non mollis ante tempor at. Aliquam massa leo, tempor eu aliquam ultrices, bibendum et elit. Pellentesque in nunc ut dui ultricies malesuada quis non arcu. Sed vitae pharetra magna. Phasellus ornare porttitor lectus, eu tincidunt ligula lobortis viverra. Fusce pharetra placerat massa, eu pulvinar ipsum pellentesque id. Duis sed molestie nisi. Curabitur ultrices placerat malesuada. Nam elementum, arcu eu volutpat vehicula, urna leo dapibus ligula, a elementum lorem lorem vel sapien. Sed tempor lacinia velit, non sodales leo tempus pharetra. Ut magna leo, condimentum eget dictum non, gravida et sem. Nulla ultricies velit et nulla aliquam convallis.

Duis imperdiet placerat orci, non commodo arcu semper pellentesque. Aenean accumsan pellentesque tellus id feugiat. Aenean vehicula condimentum velit non suscipit. Proin porta, tortor ac tristique condimentum, ipsum tortor convallis felis, et malesuada lectus ex vel tellus. Fusce gravida massa tristique magna lacinia, sed consectetur nibh aliquam. Praesent varius consequat lacus, eu vestibulum massa pharetra vehicula. Duis tempus lorem eget tellus aliquam, vel sollicitudin diam eleifend. Phasellus vel vehicula purus. Aliquam vel eleifend tellus. Morbi tempor leo vitae aliquam molestie.

Nulla at dignissim risus. Maecenas laoreet varius eros, et varius mauris egestas et. Nunc eu metus a dui varius ultrices. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In id sollicitudin velit, vel vehicula dolor. Cras semper dui vitae eleifend posuere. Integer sed laoreet justo. Integer nec metus nec lacus ultrices sagittis vel nec eros. Cras vitae tellus a purus rutrum semper vitae id quam. Pellentesque blandit sodales turpis a eleifend. Mauris quis ipsum sagittis, tincidunt nibh sit amet, commodo mi. Duis vel feugiat sapien.""",
                "notInherited" : """Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas maximus justo velit, non mollis ante tempor at. Aliquam massa leo, tempor eu aliquam ultrices, bibendum et elit. Pellentesque in nunc ut dui ultricies malesuada quis non arcu. Sed vitae pharetra magna. Phasellus ornare porttitor lectus, eu tincidunt ligula lobortis viverra. Fusce pharetra placerat massa, eu pulvinar ipsum pellentesque id. Duis sed molestie nisi. Curabitur ultrices placerat malesuada. Nam elementum, arcu eu volutpat vehicula, urna leo dapibus ligula, a elementum lorem lorem vel sapien. Sed tempor lacinia velit, non sodales leo tempus pharetra. Ut magna leo, condimentum eget dictum non, gravida et sem. Nulla ultricies velit et nulla aliquam convallis.

Duis imperdiet placerat orci, non commodo arcu semper pellentesque. Aenean accumsan pellentesque tellus id feugiat. Aenean vehicula condimentum velit non suscipit. Proin porta, tortor ac tristique condimentum, ipsum tortor convallis felis, et malesuada lectus ex vel tellus. Fusce gravida massa tristique magna lacinia, sed consectetur nibh aliquam. Praesent varius consequat lacus, eu vestibulum massa pharetra vehicula. Duis tempus lorem eget tellus aliquam, vel sollicitudin diam eleifend. Phasellus vel vehicula purus. Aliquam vel eleifend tellus. Morbi tempor leo vitae aliquam molestie.

Nulla at dignissim risus. Maecenas laoreet varius eros, et varius mauris egestas et. Nunc eu metus a dui varius ultrices. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In id sollicitudin velit, vel vehicula dolor. Cras semper dui vitae eleifend posuere. Integer sed laoreet justo. Integer nec metus nec lacus ultrices sagittis vel nec eros. Cras vitae tellus a purus rutrum semper vitae id quam. Pellentesque blandit sodales turpis a eleifend. Mauris quis ipsum sagittis, tincidunt nibh sit amet, commodo mi. Duis vel feugiat sapien."""
              }
            }
          },
          "o_checksum" : 1811920333
        }
      }
    ]
  }
}

I've tried a bunch of different search configurations using query_search and multi_match with and without wildcards but don't get any hits when searching for anything in the description or shortDescription fields but the name is getting hits. The data for the description comes from a wysiwyg and the shortDescription comes from a textarea if that matters but I can modify the mappings if needed. The description.raw was a keyword before as well but I changed that to text as I got an issue with a 32kb limit.

Some of the search configurations I've tried are the following but I didn't get any hits with neither of them:

GET advanced_object_search_product/_search
{
  "query": {
    "query_string": {
      "query": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas maximus justo velit, non mollis ante",
      "fields": [
        "localizedfields.en.description.*",
        "localizedfields.en.shortdescription.*"
      ]
    }
  }
}

GET advanced_object_search_product/_search
{
  "query": {
    "query_string": {
      "query": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas maximus justo velit, non mollis ante",
      "fields": [
        "localizedfields.en.description.*",
        "localizedfields.en.shortdescription.*"
      ],
      "analyze_wildcard": true,
      "allow_leading_wildcard": true, 
      "lenient": true
    }
  }
}

GET advanced_object_search_product/_search
{
  "query": {
    "query_string": {
      "query": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas maximus justo velit, non mollis ante*",
      "fields": [
        "localizedfields.en.description.*",
        "localizedfields.en.shortdescription.*"
      ],
      "analyze_wildcard": true,
      "allow_leading_wildcard": true, 
      "lenient": true
    }
  }
}

GET advanced_object_search_product/_search
{
  "query": {
    "multi_match": {
      "query": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas maximus justo velit, non mollis ante",
      "fields": [
        "localizedfields.en.description.*",
        "localizedfields.en.shortdescription.*"
      ],
      "lenient": true
    }
  }
}

The goal is to be able to search all text fields and to get hits on partial texts and even partial words so "Lorem Ipsum dolor" as well as "Lorem Ip" should get hits. I've read that I should use a ngram analyzer in order to get hits on partial words but would like everything to work with entire words using the current configuration first unless that's a bad idea?

What am I doing wrong? As mentioned this is my first time using Elasticsearch and I'm unable to find what's wrong?

Thanks in advance!

After doing some additional troubleshooting I've found that it get hits on properties but not nested properties. In other words I'm able to search for text in the path property but not in localizedfields.en.name and other nested properties. Why is that? Am I doing something wrong or missing something?

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.