Restream / reindexer

Embeddable, in-memory, document-oriented database with a high-level Query builder interface.
https://reindexer.io
Apache License 2.0
763 stars 64 forks source link

Incorrect work of full-text search when using a synonym from several words #68

Closed ilyamaksimov1991 closed 2 years ago

ilyamaksimov1991 commented 3 years ago

We have 4 products with the name: 1.Смартфон SAMSUNG Galaxy S20 черный 2.Смартфон SAMSUNG Galaxy S20 серый 3.Смартфон SAMSUNG Galaxy S20 красный 4.Смартфон SAMSUNG Galaxy S20 серый космос • we have a synonym "черный => серый космос"

upon request SELECT * FROM products WHERE search_products = '@name +samsung +galaxy' I get all 4 items.

upon request SELECT * FROM products WHERE search_products = '@name +samsung +galaxy +серый' I get 2 items: 2.Смартфон SAMSUNG Galaxy S20 серый 4.Смартфон SAMSUNG Galaxy S20 серый космос

upon request SELECT * FROM products WHERE search_products = '@name +samsung +galaxy +серый +космос' I get item: 4.Смартфон SAMSUNG Galaxy S20 серый космос

But if I add word required "черный", there will be errors: SELECT * COUNT() FROM products WHERE search_products ='@name +samsung +galaxy +черный' I expect to get two products, but I get three: 4."Смартфон SAMSUNG Galaxy S20 серый космос" 1."Смартфон SAMSUNG Galaxy S20 черный" and excess product 2. "Смартфон SAMSUNG Galaxy S20 серый"

Requests SELECT COUNT() FROM products WHERE search_products ='@name +samsung +galaxy +черный +космос' And SELECT COUNT() FROM products WHERE search_products ='@name +samsung +galaxy +черный +серый' got 2 products 4.Смартфон SAMSUNG Galaxy S20 серый космос 2.Смартфон SAMSUNG Galaxy S20 серый

SELECT , COUNT() FROM products WHERE search_products = '@name +samsung +galaxy +черный +something +not +in +the +title' I expect a blank search, but got 1 product: 2.Смартфон SAMSUNG Galaxy S20 серый

SELECT , COUNT() FROM products WHERE search_products = '@name +samsung +galaxy +черный +черный +черный +черный +черный +something +not +in +the +title' I expect a blank search, but got the same product 5 times: 2.Смартфон SAMSUNG Galaxy S20 серый 2.Смартфон SAMSUNG Galaxy S20 серый 2.Смартфон SAMSUNG Galaxy S20 серый 2.Смартфон SAMSUNG Galaxy S20 серый 2.Смартфон SAMSUNG Galaxy S20 серый

type Product struct { Id string reindex:"id,,pk" json:"id" Name string reindex:"name,tree" json:"name" Brand string reindex:"brand,tree" json:"brand" _ struct{} reindex:"name+brand=search_products,text,composite" }

products := []Product{ { Id: "1", Name: "Смартфон SAMSUNG Galaxy S20 черный", Brand: "SAMSUNG", }, { Id: "2", Name: "Смартфон SAMSUNG Galaxy S20 серый", Brand: "SAMSUNG", }, { Id: "3", Name: "Смартфон SAMSUNG Galaxy S20 красный", Brand: "SAMSUNG", }, { Id: "4", Name: "Смартфон SAMSUNG Galaxy S20 серый космос", Brand: "SAMSUNG'", }, }}, }

IISannikov commented 3 years ago

fixed in v3.1.0