-
Notifications
You must be signed in to change notification settings - Fork 937
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FT.SEARCH command gives me error: ERR: Query Syntax Error (this issue does work with Redis) #3258
Comments
Yes, our current parser isn't that advanced to handle all the edge cases, #3145 Meanwhile, you can use quoted 'text-with-hypens and even --spaces--' - strings with quotes ' ' or " " 🙂 |
@dranikpg your comment is not very clear, seems that the formatting is broken. can you please fix and provide concrete examples on how it should look like? |
it's not broken, I just quoted the text in a weird way 😅 It should just have quotes around the terms, like this
|
@wernermorgenstern It looks like a bug @dranikpg has suggested a workaround for you while I'm fixing this bug |
@wernermorgenstern I can not reproduce your case on the main branch and 1.19.2 on Linux and got the correct result.
I will ask somebody to check it on MacOs. I would appreciate if you check it one more time, or check that I run exactly the same commands as you do |
There is another comment, when you search for a string like `abc-123`
Get Outlook for Android<https://aka.ms/AAb9ysg>
…________________________________
From: Borys ***@***.***>
Sent: Saturday, July 6, 2024 8:17:09 AM
To: dragonflydb/dragonfly ***@***.***>
Cc: Werner Morgenstern ***@***.***>; Mention ***@***.***>
Subject: Re: [dragonflydb/dragonfly] FT.SEARCH command gives me error: ERR: Query Syntax Error (this issue does work with Redis) (Issue #3258)
@wernermorgenstern<https://github.com/wernermorgenstern> I can not reproduce your case on the main branch and got the correct result.
`127.0.0.1:6379> FT.CREATE cmd-idx ON HASH PREFIX 1 cmd: SCHEMA tid TAG code NUMERIC msgId NUMERIC path TAG status TAG tags TAG created NUMERIC SORTABLE updated NUMERIC SORTABLE sent NUMERIC SORTABLE
OK
127.0.0.1:6379> ft.search cmd-idx ***@***.***<https://github.com/tid>:{abc} @path<https://github.com/path>:{myCmd} @status:{waiting} @Updated<https://github.com/Updated>:[1719951363 +inf]"
1. (integer) 0
`
—
Reply to this email directly, view it on GitHub<#3258 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/AJPN7C5DKHLRMBEFH6M33TLZK7N4LAVCNFSM6AAAAABKIIFZBOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEMJRG42TGNZQGU>.
You are receiving this because you were mentioned.Message ID: ***@***.***>
|
@wernermorgenstern Thx. I missed your comment. It's reproducible now. |
@wernermorgenstern I haven't found any correct behavior in Redis for abc-123 search if we don't use quotes (with quotes it works for DIalect >=2). So redis always returns 0 for this query. |
@BorysTheDev The problem: This works in redis (but fails in dragonflydb): This works in dragonflydb (but fails in redis): Here is the fix: To fix that and make dragonflydb behave like the redis tokenizer please escape the following regex matches with two backslashes. The matching regex groups need to be ESCAPED like that: References: Many thanks for your efforts. |
Hi @CodeToFreedom thanks for your comment I will check it. |
Hi @BorysTheDev, |
Hi @CodeToFreedom I've played with Redis and I got a lot of strange results:
I have used redis-cli for testing |
Hi @BorysTheDev , dragonflydb-2024-08-23_14.31.57.mp4redis-2024-08-23_15.19.19.mp4Creating the index and inserting the data works both in redis and df:
FT.SEARCH works only in redis with these queries. Dragonflydb results in QuerySyntaxError exceptions.
Important to note is that usually (at least the client libraries I know of) escape with quotation mark around the argument and then use double backslash for quotation. Example (correct syntax): Also correct syntax (but without using the quotation mark, therefore single backslash): Please let me know whether helps clarifying the problem a bit or what exactly is unclear. I will try to help then. With the example script above we now have a common test case that will hopefully make it easier to compare the functionality. |
@BorysTheDev Btw have you tried using the exact same regex that I suggested above as tokenizer from the redis client library? To make the redis tokenizer behave exactly like the redis client library please use the following regex that escapes the following characters with two backslashes. In case the FT.SEARCH query doesn't use quotation marks for the filter argument, using one backslash is also a valid syntax. two \-signs: valid and used most often by client libraries single -signs: also valid So extracting the value from the query to use internally for the matching is the inverse of that. Step 2) In case dragonflydb works with escaping special char strings differently f.e. by using quotation marks around the whole query value (as you state here #3258 (comment)), an easy internal fix would be the following: Then you can just use the existing code in dragonfly in a redis-syntax compatible way and don't have to touch the internal dragonflydb parser. |
@CodeToFreedom Thank you for the excellent description of the problem, I will return to it on Monday maybe my problem was that I tried to use this functionality via redis-cli application. Anycase I will check all this functionality via redis-insight this time and if everything works OK the patch will be ready in a couple of days. Thank you for the documentation links. |
@CodeToFreedom I've checked your examples and they work. I don't know the reason, but I have tested with HASH instead of JSON and for HASH it still doesn't work. Anycase I will update our parser to support this functionality even for HASH |
@BorysTheDev Great and thanks for the fix. I will directly test it once it's available in the upcoming release. |
@BorysTheDev After testing it seems to work as expected now. Many thanks for your efforts. |
Describe the bug
I create an index (see below), and I am trying to run this query:
ft.search cmd-idx "@tid:{abc} @path:{myCmd} @status:{waiting} @updated:[1719951363 +inf]"
Index is:
To Reproduce
Steps to reproduce the behavior:
ft.search cmd-idx "@tid:{abc} @path:{myCmd} @status:{waiting} @updated:[1719951363 +inf]"
ERR Query syntax error
Expected behavior
Supposed to return records (0 or more)
Environment (please complete the following information):
Darwin local 23.5.0 Darwin Kernel Version 23.5.0: Wed May 1 20:12:58 PDT 2024; root:xnu-10063.121.3~5/RELEASE_ARM64_T6000 arm64
build time: 2024-07-02 06:22:16
Additional context
This works with Redis
The text was updated successfully, but these errors were encountered: