Change tag filter to be partial matching instead of exact #2609
+146
−3
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
The tag filter with a string value is doing exact matching, which is less useful that a partial match and if you compare it to name filtering the
:
operation is for partial not exact matching.Because the tag filter supports both strings (the tag value matches the string) and numbers (the count of tags) it is not really possible to support both
=
and:
for strings, as that would cause ambiguity in the parser given that all numbers are a subset of a string.Solution
Update setElementOperation so that the
:
operator does partial matching of the set element value.Though setElementOperation is also used in the various legality filters (legality, banned, restricted and variants), the change for
:
to partial match doesn't affect it because the grammar defines all the possible formats as full strings. Thus even though setElementOperation will be doing a partial match, its equivalent to an exact match given that only the exact format strings are allowed.Testing
Before
It can match tags that are a single word (no spaces) without quotes:
![old-tag-string-exact-match-single-word](https://private-user-images.githubusercontent.com/10130745/412936412-d684e744-d876-4c4a-af53-f073512178f8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTQyMzUsIm5iZiI6MTczOTU5MzkzNSwicGF0aCI6Ii8xMDEzMDc0NS80MTI5MzY0MTItZDY4NGU3NDQtZDg3Ni00YzRhLWFmNTMtZjA3MzUxMjE3OGY4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA0MzIxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE3MjAwMTRiNzRkNWY3N2YwOTQ5MTNmODhiMmRiMzJhYmIzNDU2YmE1YWI4MzFjMTlmNzM1OGMyMDQ5NDcyZTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.xjNhAv6CUbJTMuxbOwjd1CKABVzYfnqi4-wZ7-9ghw4)
But if the tag has a space, double quotes are required (otherwise the filter used is tag:word AND name contains word2)
![old-tag-string-quoted-exact-match-necessary-for-spaces](https://private-user-images.githubusercontent.com/10130745/412936416-372e0b62-0461-44d8-93fe-5dd346831321.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTQyMzUsIm5iZiI6MTczOTU5MzkzNSwicGF0aCI6Ii8xMDEzMDc0NS80MTI5MzY0MTYtMzcyZTBiNjItMDQ2MS00NGQ4LTkzZmUtNWRkMzQ2ODMxMzIxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA0MzIxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWExYjUxODMyNTdmNzEwNTYyYWZlMDllMzk2ZGVkZGUxZGVmYjFlNDM1NjAyOTVkY2M5NGQxZjk0Yzc0YThlZmYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.HrUlotSjv4VFLIcwhRhuoZhQ4CVUYvQB8OaLlJF4RPs)
And per the above examples, Tag filter string only does exact matching so "Spell" doesn't match the tags with "Spells matter"
![old-tag-string-only-exact-match](https://private-user-images.githubusercontent.com/10130745/412936422-91191d64-7647-4438-8d8c-50fdbd7f70a1.PNG?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTQyMzUsIm5iZiI6MTczOTU5MzkzNSwicGF0aCI6Ii8xMDEzMDc0NS80MTI5MzY0MjItOTExOTFkNjQtNzY0Ny00NDM4LThkOGMtNTBmZGJkN2Y3MGExLlBORz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA0MzIxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWU3NTFhN2ZjZjJmMGE4YmNkNWFkZmFjMmZmNjllZjc4ZWI1Nzk4YWJhYmNkNTk0Y2IzNDIzYWE2N2FlOGQxNDQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.B4-xkAoUX21UFZQHVVEckxj-mkV149vtEMrW9id2Gb0)
After
Now tag does partial match:
![new-tag-string-partial-matching](https://private-user-images.githubusercontent.com/10130745/412937284-f0da8cdc-b54e-4e0c-a3b5-38f434463d8a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTQyMzUsIm5iZiI6MTczOTU5MzkzNSwicGF0aCI6Ii8xMDEzMDc0NS80MTI5MzcyODQtZjBkYThjZGMtYjU0ZS00ZTBjLWEzYjUtMzhmNDM0NDYzZDhhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA0MzIxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVkNWM0NzNhNDAyNDgzZjRkYmI1YmIyMzYxYTE0ZWEwNTkxZjlmZGJmMzJmZjI1ZWRhMGIyZjMyNWY0YmNmZDgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.DS4usfEfc_p7U9GxXngVDtOyaQTPnC-zhahOV-9Qqn8)
Even with quotes for multiple words:
![new-tag-string-partial-matching-with-qoutes](https://private-user-images.githubusercontent.com/10130745/412937287-6f148935-d0ac-48be-8b9f-9388e646aea0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTQyMzUsIm5iZiI6MTczOTU5MzkzNSwicGF0aCI6Ii8xMDEzMDc0NS80MTI5MzcyODctNmYxNDg5MzUtZDBhYy00OGJlLThiOWYtOTM4OGU2NDZhZWEwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA0MzIxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWNmODE3YWZiZTc4OWQ5NzYzM2QxZDZlY2Q1MWY5NTUzYjU3NjliYmFhOGI4ZTFkZjAyMjBhMjViZjg5NGIyYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.08Mehj_oS5DwDu4EZfCjm0EyldAuNV8wph3nSSMy3MM)
Numeric matching still works:
![new-tag-numeric-matching-still-works2](https://private-user-images.githubusercontent.com/10130745/412937289-6608e281-0b36-4b37-9a6a-9d3224d4aee1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTQyMzUsIm5iZiI6MTczOTU5MzkzNSwicGF0aCI6Ii8xMDEzMDc0NS80MTI5MzcyODktNjYwOGUyODEtMGIzNi00YjM3LTlhNmEtOWQzMjI0ZDRhZWUxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA0MzIxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ4NDFlOTc5Y2ViMGFmNjA4NzkzNDUxOTQzYTZhMGU4ODk3ZDIwYjE1MTM0NWU0NDk0MjU2YmNhMWM0NTI4ZmMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.-6-yZvp4E5fcRtQEjXQg6tYXP4HX3Zc5C_o7Pdc5HZg)
![new-tag-numeric-matching-still-works](https://private-user-images.githubusercontent.com/10130745/412937290-4ef04e66-bf19-464d-bc4a-4d7d0fe91825.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTQyMzUsIm5iZiI6MTczOTU5MzkzNSwicGF0aCI6Ii8xMDEzMDc0NS80MTI5MzcyOTAtNGVmMDRlNjYtYmYxOS00NjRkLWJjNGEtNGQ3ZDBmZTkxODI1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDA0MzIxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTc5Zjg0NmRhM2IzZmEwMDg1OGZlNjgzYjM3NTA0NjU0YzI1N2IxOGQwNTRkOTIzMjQ3YzE0NzU0MjVlZDg5ZDcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.wChlRoVuTy4FOdon__XpHBoG5sXKjzrIuiqdTFwt3sQ)