name
とdescription
を持つモデルがあります。ユーザーが名前またはdescriptionのstringの一部を検索できるようにする必要があります.SQLクエリを使用してこれを行う代わりに、私はplayframework
のためにインストールできるsearch
モジュールを使用すると考えました。私はこのplayframeworkの検索モジュールを使用して、適切な
、私はapplication.confで
@Entity
@Indexed
class Item{
@Field
public String name;
@Field
public String description;
public Date creationDate;
...
...
}
モデルにこれらの注釈を入れて、私は
play.search.reindex=enabled
を設定しました
public static List<Item> getSearchResults(String kw){
List<Item> items = null;
if(kw!=null && kw.length()>0) {
String trimkw = kw.trim().toLowerCase();
String pattern = "%"+trimkw+"%";
String query="select distinct b from Item b where (lower(name) like :pattern or lower(description) like :pattern)";
items = Item.find(query).bind("pattern", pattern).fetch();
System.out.println("getSearchResults():: items="+items.size());
}
return items;
}
これは正しく動作し、入力文字列が大文字または小文字の場合などを処理します。また、 tは
I have items JavaRing ,Android
when the kw="JAvA"
the search returns a list containing JavaRing
、 例えば..部分文字列の結果を取得します私はこの
import play.modules.search.Search;
import play.modules.search.Query;
...
String qstr = "name:"+trimkw+" OR description:"+trimkw;
System.out.println("query string="+qstr);
Query q = Search.search(qstr, Item.class);
items = q.fetch();
System.out.println("items="+items.size());
のような検索モジュールを使用してみました。しかし、私は、以前に使用されるように、これは同じキーワードの空のリストを返します。場合。
keyword = "JAvA"
query string=name:java OR description:java
items=0
検索文字列を指定した方法に問題がありますか?