Hi
Then I can do nothing about it.

Sent from my iPhone

> On Shahrivar 31, 1397 AP, at 7:50 PM, Dan Kennedy <danielk1...@gmail.com> 
> wrote:
> 
>> On 09/22/2018 02:11 PM, Maziar Parsijani wrote:
>> Hi,Dan
>> I have trimmed it here you can download it:
>> https://drive.google.com/file/d/1D0xKF3DaOEbvfe9yFf0aFQvpo2nxWYqF/view?usp=sharing
>> And the problem is searching with MATCH 'أعلم*' it must find 5 rows.
>> it could be the same as I use LIKE "%أعلم%"
> 
> Thaks for the db.
> 
> As far as I can tell it's working correctly.
> 
> The default FTS5 tokenizer splits text on whitespace and punctuation. And 
> 'token*' only matches tokens that begin with "token", not all tokens that 
> contain the string "token".
> 
> In utf-8, your search string is X'D8A3D8B9D984D985'.
> 
> So, for example, the LIKE pattern matches the text that, rendered in utf-8, 
> is:
> 
>  X'20D988D8A3D8B9D984D985D988D8A7'
> 
> because it contains the search string starting at the third byte. But the 
> character before that is U+0648 - "ARABIC LETTER WAW", which is not 
> whitespace or punctuation. So the search string is not at the start of the 
> token and the query does not match.
> 
> Dan.
> 
> 
> 
> 
> 
>> 
>> 
>>> On Tue, Sep 11, 2018 at 8:35 PM Dan Kennedy <danielk1...@gmail.com> wrote:
>>> 
>>>> On 09/11/2018 01:26 PM, Maziar Parsijani wrote:
>>>> Thanks for your answer Eric,Sandu
>>>> About the first idea of Eric I have to say its correct for me when I do a
>>>> test with another fts5 table with no huge rows but my database has that
>>>> problem.And about the other possibility I tested that before to set "*"at
>>>> the first and end of the match but I have got an error.Here if there is
>>> no
>>>> problem I will attach an example Arabic text database  if you search for
>>>> 'أعلم*' it must find 83 rows but it will find 49 which is the same with
>>>> "أعلم" results.and if you put "*"at the both sides you will get error.I
>>>> don't know if I did something wrong during creation but this is all I
>>> have
>>>> got.
>>> 
>>> The "*" may only occur following a string in an fts5 expression, not
>>> before:
>>> 
>>>   https://sqlite.org/fts5.html#fts5_prefix_queries
>>> 
>>> If possible, can you trim the database down to just two rows that
>>> demonstrate the problem and upload it somewhere? i.e. so that it
>>> contains two rows that should both be matched by 'أعلم*', but for which
>>> the current FTS5 only matches one.
>>> 
>>> Even if the complete database makes the problem obvious to Arabic
>>> readers, it will be quite difficult for non-readers to deal with.
>>> 
>>> Thanks,
>>> Dan.
>>> 
>>> 
>>> 
>>> 
>>> 
>>>> 
>>>> On Tue, Sep 11, 2018 at 10:20 AM Sandu Buraga <buraga.sa...@gmail.com>
>>>> wrote:
>>>> 
>>>>> In Arabic you have a different direction of the text. Might be that the
>>>>> reason?
>>>>> 
>>>>> Sandu
>>>>> 
>>>>> Eric Minbiole <eminbi...@gmail.com> schrieb am Di., 11. Sep. 2018,
>>> 00:23:
>>>>> 
>>>>>>> SELECT rowid,text
>>>>>>> FROM table
>>>>>>> WHERE table MATCH 'أعلم*';
>>>>>>> 
>>>>>>> And I have to add this that my data is Arabic text.
>>>>>>> 
>>>>>>> This method must find words that contains 'أعلم' but it doesn't. What
>>>>>>> should I do now.
>>>>>> I just tried this in SQLite version 3.24.0 on a Mac, and it seems to
>>>>> work.
>>>>>> Please see my example below. In particular, the first select doesn't
>>>>> have a
>>>>>> *, so it doesn't find the word. The second example includes a trailing
>>> *,
>>>>>> so it performs a "starts with" search, and does find the match. (Note
>>>>> that
>>>>>> I simply doubled the letters of your original arabic text to make a
>>>>> longer
>>>>>> word.)
>>>>>> 
>>>>>> MacBook-II:Programs eric$ ./sqlite3
>>>>>>> SQLite version 3.24.0 2018-06-04 19:24:41
>>>>>>> Enter ".help" for usage hints.
>>>>>>> Connected to a transient in-memory database.
>>>>>>> Use ".open FILENAME" to reopen on a persistent database.
>>>>>>> sqlite> CREATE VIRTUAL TABLE fts USING fts5(doc);
>>>>>>> sqlite> INSERT INTO fts (rowid, doc) VALUES (1, 'english text');
>>>>>>> sqlite> INSERT INTO fts (rowid, doc) VALUES (2, 'arabic أعلمأعلم');
>>>>>>> sqlite> SELECT rowid FROM fts WHERE fts MATCH 'أعلم';
>>>>>>> sqlite> SELECT rowid FROM fts WHERE fts MATCH 'أعلم*';
>>>>>>> 2
>>>>>>> sqlite>
>>>>>> 
>>>>>> One possible explanation: You mentioned that you want a "contains"
>>>>> search.
>>>>>> However, the trailing asterisk in your example only results in a
>>> "begins
>>>>>> with" search. If you really want a "contains" search, you'll need to
>>> put
>>>>>> the * at both the beginning and end of the match word. E.g., "WHERE fts
>>>>>> MATCH '*asdf*';
>>>>>> 
>>>>>> Hope this is helpful.
>>>>>> 
>>>>>> ~Eric
>>>>>> _______________________________________________
>>>>>> sqlite-users mailing list
>>>>>> sqlite-users@mailinglists.sqlite.org
>>>>>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>>>>> _______________________________________________
>>>>> sqlite-users mailing list
>>>>> sqlite-users@mailinglists.sqlite.org
>>>>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>>>> _______________________________________________
>>>> sqlite-users mailing list
>>>> sqlite-users@mailinglists.sqlite.org
>>>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>>> 
>>> _______________________________________________
>>> sqlite-users mailing list
>>> sqlite-users@mailinglists.sqlite.org
>>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>> _______________________________________________
>> sqlite-users mailing list
>> sqlite-users@mailinglists.sqlite.org
>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> 
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to