Как мога да търся ключова дума в Hibernate Search с определен член?

Използвам Hibernate Search DSL, за да направя заявката и трябва да търся по ключова дума на френски.

Например, когато използвам тази заявка:

Query query = queryBuilder.keyword().onField("normVal").matching("asthme").createQuery();

Просто съвпада с думата asthme в полето "normVal", но искам заявката да може да намери и думата "l'asthme" или "d'asthme".

Някой знае ли как мога да направя това в Hibernate Search?????????


person Stephan    schedule 09.04.2014    source източник


Отговори (1)


Можете да използвате метода matching със заместващи знаци във вашия низ: ? представлява един знак, а * представлява всяка последователност от знаци

Така че вашият код, например, може да бъде:

 Query query = queryBuilder.keyword().onField("normVal").matching("*asthme*").createQuery();

Можете да намерите повече подробности тук

Редактиране след OP коментар

Ако имате фиксирани стойности за търсене, като думи с членове, можете също да опитате нещо подобно вместо заместващи знаци:

Query query = queryBuilder.bool()
.should(queryBuilder.keyword().onField("normVal").matching("l'asthme").createQuery())
.should(queryBuilder.keyword().onField("normVal").matching("d'asthme").createQuery())
.should(queryBuilder.keyword().onField("normVal").matching("asthme").createQuery())
.createQuery();

Моля, обърнете внимание, че методът should ще работи като оператор на заявка OR

person Cirou    schedule 09.04.2014
comment
Опитах този метод, но търсенето със заместващ знак ще увеличи времето за търсене и видях, че се препоръчва заявката да не започва с ? или *. Има ли друг начин да се реши това? - person Stephan; 09.04.2014
comment
Ако вече сте опитали това, какъв е истинският въпрос? Това не е това, което поискахте, следващия път бъдете по-конкретни, моля. - person Cirou; 09.04.2014
comment
Съжалявам, че просто искам да намеря решение, което може да разреши този проблем и да не намалява производителността на системата. - person Stephan; 09.04.2014
comment
Но при наистина търсене l' или d' не са фиксирани, може би ще има някои други символи. Имам нужда от динамичен начин. Освен това, ако използвам ??asthme, това означава ли, че ще намери l'asthme и d'asthme? - person Stephan; 09.04.2014
comment
Да, трябва да работи, но ще има същата производителност като началния знак '*', наистина обикновено се препоръчва заявката да не започва с нито едно от двете? или *, както посочихте в първия си коментар - person Cirou; 09.04.2014