# Query matching algorithm 1
Algorithm for matching input query with query template
### pre-processing on query_template
the preprocessing only depends on
- query
- orders_ignored
- synonyms
but does not depend on
- stopwords_ignored
- pubctuations_ignored
```JSON
{
"query": "the women's jacket",
"orders_ignored": True,
"synonyms": {"women's": ["woman"]}
}
```
will be spanned into `spanned query dictionary`
```JSON
{
"womens jacket": "the women's jacket",
"woman jacket": "the women's jacket",
"jacket womens": "the women's jacket",
"jacket woman": "the women's jacket"
}
```
### matching
input_query will always be normalized such that
- stopwords are ignored
- pubctuations are ignored
the normalized query will be matched with `spanned query dictionary` by exact match, and will be matched to up to one query template
after finding a match, the matched query template needs to be validated, to make sure the `stopwords` and `pubctuations` could be ignored, if needed.
### Advantages
1, this can support stemming as well, which would be treated the same as stopwords/pubctuations
2, we can detect when collisions are present between query templates (when there exists one query text that can match with multiple query templates)
### Disadvantages
1, the algorithm is not very straightforward, and need a lot of caution in implementation
2, it would take more memory, for maintaining the `spanned query dictionary`