1

Im using ES 1.7, trying to look for documents using match_phrase to search using exact match string. The filter works fine when used alone, however when I combine the filters, I get an error.

example: people document q=aaron&address=scarborough - searching a person by name and address, works fine.

{
  "query": {
    "match_phrase": {
      "name": "aaron"
    }
  },
  "filter": {
    "bool": {
      "must": {
        "nested": {
          "path": "addresses",
          "query": {
            "match_phrase": {
              "address": "scarborough"
            }
          }
        }
      }
    }
  },

q=aaron&phone=813-689-6889 - searching a person by name and phone number works fine as well.

{
  "query": {
    "match_phrase": {
      "name": "aaron"
    }
  },
  "filter": {
    "bool": {
      "must": {
        "query": {
          "match_phrase": {
            "phone": "813-689-6889"
          }
        }
      }
    }
  }

However, When I try to use both filters, address and phone I get a No filter registered for [match_phrase] error

for example: q=aaron&address=scarborough&phone=813-689-6889

{
  "query": {
    "match_phrase": {
      "name": "aaron"
    }
  },
  "filter": {
    "bool": {
      "must": {
        "nested": {
          "path": "addresses",
          "query": {
            "match_phrase": {
              "address": "scarborough"
            }
          }
        },
        "query": {
          "match_phrase": {
            "phone": "813-689-6889"
          }
        }
      }
    }
  }

the error, when using address and phone filters together:

nested: QueryParsingException[[pl_people] No filter registered for [match_phrase]]; }]","status":400}):

index mapping (person):

{
  "pl_people": {
    "mappings": {
      "person": {
        "properties": {
          "ac_name": {
            "type": "string",
            "analyzer": "autocomplete"
          },
          "addresses": {
            "type": "nested",
            "properties": {
              "address": {
                "type": "string"
              },
              "city": {
                "type": "string",
                "index": "not_analyzed"
              },
              "city_id": {
                "type": "long"
              },
              "country": {
                "type": "string",
                "index": "not_analyzed"
              },
              "county": {
                "type": "string",
                "index": "not_analyzed"
              },
              "county_id": {
                "type": "long"
              },
              "id": {
                "type": "long"
              },
              "location": {
                "type": "geo_point"
              },
              "parameterized": {
                "type": "string"
              },
              "state": {
                "type": "string",
                "index": "not_analyzed"
              },
              "state_id": {
                "type": "long"
              },
              "zip": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "author": {
            "type": "string",
            "index": "not_analyzed"
          },
          "body": {
            "type": "string",
            "analyzer": "remove_html",
            "fields": {
              "ns_body": {
                "type": "string",
                "analyzer": "remove_html_stopwords"
              }
            }
          },
          "charities": {
            "type": "nested",
            "properties": {
              "email": {
                "type": "string",
                "index": "not_analyzed"
              },
              "id": {
                "type": "long"
              }
            }
          },
          "community": {
            "properties": {
              "name": {
                "type": "string",
                "index": "not_analyzed"
              },
              "parameterized": {
                "type": "string",
                "index": "not_analyzed"
              },
              "slug": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "created_at": {
            "type": "date",
            "format": "dateOptionalTime"
          },
          "date_of_birth": {
            "type": "date",
            "format": "dateOptionalTime"
          },
          "delimiters": {
            "type": "nested",
            "properties": {
              "delimiter_type": {
                "type": "string",
                "index": "not_analyzed"
              },
              "id": {
                "type": "long"
              }
            }
          },
          "description": {
            "type": "string"
          },
          "employments": {
            "type": "nested",
            "properties": {
              "email": {
                "type": "string",
                "index": "not_analyzed"
              },
              "employment_status": {
                "type": "string",
                "index": "not_analyzed"
              },
              "foia_contact": {
                "type": "boolean"
              },
              "id": {
                "type": "long"
              },
              "phone": {
                "type": "string",
                "index": "not_analyzed"
              },
              "phone_extension": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "first_name": {
            "type": "string",
            "fields": {
              "na_first_name": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "last_name": {
            "type": "string",
            "fields": {
              "na_last_name": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "market": {
            "properties": {
              "name": {
                "type": "string",
                "index": "not_analyzed"
              },
              "parameterized": {
                "type": "string",
                "index": "not_analyzed"
              },
              "slug": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "middle_name": {
            "type": "string",
            "fields": {
              "na_middle_name": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "most_recent_organization": {
            "properties": {
              "description": {
                "type": "string"
              },
              "id": {
                "type": "long"
              },
              "name": {
                "type": "string"
              },
              "parameterized": {
                "type": "string"
              },
              "phone": {
                "type": "string"
              }
            }
          },
          "name": {
            "type": "string",
            "fields": {
              "na_name": {
                "type": "string",
                "index": "not_analyzed"
              },
              "ngram_name": {
                "type": "string",
                "analyzer": "my_start"
              },
              "ns_name": {
                "type": "string",
                "analyzer": "no_stopwords"
              }
            }
          },
          "organizations": {
            "properties": {
              "name": {
                "type": "string"
              },
              "parameterized": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "package": {
            "properties": {
              "name": {
                "type": "string",
                "index": "not_analyzed"
              },
              "parameterized": {
                "type": "string",
                "index": "not_analyzed"
              },
              "slug": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "parameterized": {
            "type": "string",
            "index": "not_analyzed"
          },
          "phone": {
            "type": "string"
          },
          "photo": {
            "properties": {
              "large": {
                "type": "string"
              },
              "medium": {
                "type": "string"
              },
              "teaser": {
                "type": "string"
              },
              "thumb": {
                "type": "string"
              },
              "url": {
                "type": "string"
              }
            }
          },
          "projects": {
            "properties": {
              "id": {
                "type": "long"
              },
              "name": {
                "type": "string",
                "index": "not_analyzed"
              },
              "parameterized": {
                "type": "string",
                "index": "not_analyzed"
              },
              "slug": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "public_offices": {
            "type": "nested",
            "properties": {
              "email": {
                "type": "string",
                "index": "not_analyzed"
              },
              "employment_status": {
                "type": "string",
                "index": "not_analyzed"
              },
              "id": {
                "type": "long"
              }
            }
          },
          "published": {
            "type": "string",
            "index": "not_analyzed"
          },
          "region": {
            "properties": {
              "name": {
                "type": "string",
                "index": "not_analyzed"
              },
              "parameterized": {
                "type": "string",
                "index": "not_analyzed"
              },
              "slug": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "resource": {
            "type": "string"
          },
          "short_description": {
            "type": "string"
          },
          "show_path": {
            "type": "string"
          },
          "time": {
            "type": "date",
            "format": "dateOptionalTime"
          },
          "updated_at": {
            "type": "date",
            "format": "dateOptionalTime"
          }
        }
      }
    }
  }
}

Document I am using to test

[
    {
        "_index": "pl_people",
        "_type": "person",
        "_id": "813106",
        "_score": null,
        "sort": [
            -9223372036854775808
        ],
        "resource": "Person",
        "parameterized": "813106-aaron-mcguire",
        "created_at": "2011-10-29T19:51:24.000-05:00",
        "updated_at": "2014-12-11T07:21:08.000-06:00",
        "name": "Aaron McGuire",
        "title": null,
        "photo": {
            "url": "/assets/140x140.gif"
        },
        "description": null,
        "short_description": null,
        "time": "2014-12-11",
        "show_path": "/people/813106-aaron-mcguire",
        "published": true,
        "aliases": [],
        "phone": "813-689-6889",
        "date_of_birth": "1991-03-01",
        "first_name": "Aaron",
        "middle_name": "",
        "last_name": "McGuire",
        "delimiters": [],
        "market": null,
        "region": null,
        "most_recent_organization": null,
        "households": [],
        "court_cases": [],
        "addresses": [
            {
                "id": 1,
                "parameterized": "1",
                "address": "123 Scarborough road",
                "zip": "L5A2A9",
                "city": "Ontario",
                "country": "USA",
                "state": "California",
                "location": null,
                "state_id": null,
                "county_id": null,
                "city_id": null
            }
        ],
        "projects": [],
        "voter_ids": [],
        "id": "813106"
    }
]
queroga_vqz
  • 1,031
  • 3
  • 11
  • 25
  • 1
    can you post the same documents, which I can use to reproduce your issue? also your mapping isn't complete, can you provide your setting as well, in your mapping your have used `autocomplete`, `no_stopwords`, `my_start` custom analyers and in you example query `address` fields is used which isn't present in your mapping. – Amit Mar 09 '20 at 14:09
  • 1
    @OpsterElasticsearchNinja, Ok, updated the question. Sorry, I tried cleaning up the mapping a bit, for the question to be a bit shorter – queroga_vqz Mar 09 '20 at 14:30
  • I created index with your mapping and indexed the sample doc but getting exception even when hitting with 1 filter `nested: QueryParsingException[[so-match-phrase] [nested] nested object under path [addresses] is not of nested type]` – Amit Mar 09 '20 at 19:45
  • that's odd, I have no issues when using address or phone filter by themselves, the issues only come when combining the two of them, also on the mapping, address is listed as nested. – queroga_vqz Mar 10 '20 at 01:26
  • After spending quite some time on error and query part, finally able to make it work, please have a look and let me know if you have further questions. – Amit Mar 10 '20 at 05:55

1 Answers1

0

Finally, I was able to reproduce the issue, Looks like "include_in_parent": true, missed in your mapping, due to which I was getting the error mentioned In my comment..

To fix, the issue I used the same mapping provided you but add "include_in_parent": true, at the top level of address nested field. For brevity providing only the address part of modified mapping.

"addresses": {
            "type": "nested",
            "include_in_parent": true, --> added only this in your mapping.
            "properties": {
              "address": {
                "type": "string"
              },
              "city": {
                "type": "string",
                "index": "not_analyzed"
              },
              "city_id": {
                "type": "long"
              },
              "country": {
                "type": "string",
                "index": "not_analyzed"
              },
              "county": {
                "type": "string",
                "index": "not_analyzed"
              },
              "county_id": {
                "type": "long"
              },
              "id": {
                "type": "long"
              },
              "location": {
                "type": "geo_point"
              },
              "parameterized": {
                "type": "string"
              },
              "state": {
                "type": "string",
                "index": "not_analyzed"
              },
              "state_id": {
                "type": "long"
              },
              "zip": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          }

After that indexed some sample docs, which have different values of address and name param, to verify the right outcome of my search query.

And final search query which includes both the filter, please note, I removed the nested part on address field as it's included at the parent document, so you can directly query now on it. This query looks much simple and now gives the expected result.

{
  "query": {
    "match_phrase": {
      "name": "aaron"
    }
  },
  "filter": {
    "bool": {
      "must": [{
        "query": {
          "match_phrase": {
            "address": "scarborough"
          }
        }
      },
      {
       "query": {
          "match_phrase": {
            "phone": "813-689-6889"
          }
        }
      }]
    }
  }
}

Output on sample docs

 "hits": [
            {
                "_index": "so-match-phrase",
                "_type": "pl_people",
                "_id": "4",
                "_score": 0.19178301,
                "_source": {
                    "resource": "Person",
                    "parameterized": "813106-aaron-mcguire",
                    "created_at": "2011-10-29T19:51:24.000-05:00",
                    "updated_at": "2014-12-11T07:21:08.000-06:00",
                    "name": "aaron McGuire",
                    "title": null,
                    "photo": {
                        "url": "/assets/140x140.gif"
                    },
                    "description": null,
                    "short_description": null,
                    "time": "2014-12-11",
                    "show_path": "/people/813106-aaron-mcguire",
                    "published": true,
                    "aliases": [],
                    "phone": "813-689-6889",
                    "date_of_birth": "1991-03-01",
                    "first_name": "Aaron",
                    "middle_name": "",
                    "last_name": "McGuire",
                    "delimiters": [],
                    "market": null,
                    "region": null,
                    "most_recent_organization": null,
                    "households": [],
                    "court_cases": [],
                    "addresses": [
                        {
                            "id": 1,
                            "parameterized": "1",
                            "address": "Scarborough road",
                            "zip": "L5A2A9",
                            "city": "Ontario",
                            "country": "USA",
                            "state": "California",
                            "location": null,
                            "state_id": null,
                            "county_id": null,
                            "city_id": null
                        }
                    ],
                    "id": "813106"
                }
            },
            {
                "_index": "so-match-phrase",
                "_type": "pl_people",
                "_id": "1",
                "_score": 0.19178301,
                "_source": {
                    "resource": "Person",
                    "parameterized": "813106-aaron-mcguire",
                    "created_at": "2011-10-29T19:51:24.000-05:00",
                    "updated_at": "2014-12-11T07:21:08.000-06:00",
                    "name": "Aaron McGuire",
                    "title": null,
                    "photo": {
                        "url": "/assets/140x140.gif"
                    },
                    "description": null,
                    "short_description": null,
                    "time": "2014-12-11",
                    "show_path": "/people/813106-aaron-mcguire",
                    "published": true,
                    "aliases": [],
                    "phone": "813-689-6889",
                    "date_of_birth": "1991-03-01",
                    "first_name": "Aaron",
                    "middle_name": "",
                    "last_name": "McGuire",
                    "delimiters": [],
                    "market": null,
                    "region": null,
                    "most_recent_organization": null,
                    "households": [],
                    "court_cases": [],
                    "addresses": [
                        {
                            "id": 1,
                            "parameterized": "1",
                            "address": "123 Scarborough road",
                            "zip": "L5A2A9",
                            "city": "Ontario",
                            "country": "USA",
                            "state": "California",
                            "location": null,
                            "state_id": null,
                            "county_id": null,
                            "city_id": null
                        }
                    ],
                    "id": "813106"
                }
            }
        ]
Amit
  • 30,756
  • 6
  • 57
  • 88
  • thank you so much for your time @Opster Elasticsearch Ninja, couldn't test yet, but will give you feedback ASAP – queroga_vqz Mar 10 '20 at 17:02
  • 1
    @queroga_vqz, justy woke-up and great to hear the feedback, all the effort paid-off very well :-) – Amit Mar 11 '20 at 01:58