我需要根据部分文本匹配来获取搜索结果.例如,如果产品中有一个节点说"apple-iphone-6"并且用户在搜索框中输入"iphone"文本,我仍然可以获取结果.
我在querybuilder上尝试了以下查询,它有效:
http://localhost:4502/bin/querybuilder.json?path=/etc/commerce/products&type=nt:unstructured&nodename=*iphone*
Run Code Online (Sandbox Code Playgroud)
但是,如何以编程方式实现此*iphone*部分?我正在使用谓词创建一个查询,如下所示
String searchTerm = "iphone";
map.put("path", "/etc/commerce/products");
map.put("type", "nt:unstructured");
map.put("nodename", searchTerm);
Query query = queryBuilder.createQuery(PredicateGroup.create(map), session);
SearchResult result = query.getResult();
Run Code Online (Sandbox Code Playgroud)
但我没有得到任何结果,原因是,节点名称(apple-iphone-6)与搜索词(iphone)不完全匹配.但是,如果我将*附加到nodename值,然后在querybuilder示例中实现基于部分文本的搜索,则同样的工作正常.我应该在代码中做些什么更改才能根据部分节点名称匹配获得结果?
小智 6
您已经找到了自己的解决方案,NodenamePredicateEvaluator接受通配符参数,因此您需要使用通配符包围搜索项,例如:
String searchTerm = "iphone";
...
map.put("nodename", "*" + searchTerm + "*");
Run Code Online (Sandbox Code Playgroud)