我的查询参数如下:
q=name:abc+age:20+roleid:(23|45)|audeince:(23|24).Here + is for AND | is for OR
我必须接受这个查询参数,因为它存在于我的spring控制器中,并且必须向solar查询才能获取数据。

@Controller
@RequestMapping("/user")
public class BooksController {
@RequestMapping(value="/details", method=RequestMethod.GET)
public ResponseEntity<?> getUser(final HttpServletRequest request) {
String params = requestParams.get("q")[0];
//passing this string to make query in apache solar
}
}
我需要编写一个解析器来分割param值以进行solar query.how编写一个查询解析器来拆分上面的url以使solar query满足OR AND condition.name:abc+age:20+roleid: (23 | 45)| audeince:(23 | 24)表示创建一个太阳查询,其中name = abc和age = 20,roleid在(23,24)或者为(23,24)中的观众。这样用户发送查询。 / p>
例如:姓:(ABC | BCD)+名字:ABC + EMAILID:ABC + DSID:ABC | countryCd:US + audienceId:(123 + 678)
首先使用这样的正则表达式转换 firstName:(abc | bcd)+ ----------- segment1
名字:ABC + .............分段2
EMAILID:ABC + .............段3
DSID:ABC | -------------- segment4
countryCd:US + ---------- segment5
audienceId:(123 + 678)------第6段;
像许多细分可能会出现在网址中我有一个名为
的班级类Queryobj {
私人字符串字段;
私人清单值;
private String internalOperator;
private String externalOperator;
}
firstName:(abc | bcd)+再次使用正则表达式映射像这样
字段=名字
值= {ABC,BCD}
internalOperator = |
externalOperator = +
喜欢第二段emailId:abc +
字段= EMAILID
值= ABC
internalOperator =空
externalOperator = +
对于其他段也是如此。如果有n个段我们有n个对象。
之后将每个对象添加到Linked List。如果internalOperator或externalOperator为null,则将其保留为null。如何实现
答案 0 :(得分:0)
您可以使用此正则表达式模式来获取&#34; key:value运算符&#34;段
Pattern keyValuePattern = Pattern.compile("[\\w]+:([\\w@.]+|\\([\\w|+@.]+\\))[+|]?");