问题在于:我有一个列(名为customername),其中包含示例“JOHN LENARD SMITH”等的名称。
所以我想做一个查询,它将获得名字为'JOHN'且姓氏为'SMITH'的所有名字;第二个名字并不重要,所以我会放*通配符。
还有一个更大的问题:如果用户写“JOHN LENARD SMITH”找到这个确切的人,我应该能够这样做
我的尝试:
1。 我创建了text_ws字段并测试了以下查询: 问题是这样的:我有一个列(命名名称),其中包含示例“ИванКириловПетров”,“НинаСемоваМариножа”等的名称。
所以我想做一个查询,它将获得名字'Иван'和姓氏'Петров'的所有名字;第二个名字并不重要,所以我会放*通配符。
还有一个更大的问题:如果用户写“ИванКириловПетров”以找到这个确切的人,我应该能够
我的尝试:
我创建了text_ws字段并测试了以下查询:
q=cust_name:JOHN*SMITH
q=cust_name:/JOHN.*SMITH/
什么都行不通!我绝望地认为我永远不会解决这个问题。
答案 0 :(得分:0)
由于您使用的是text_ws
字段,因此您需要在查询中包含空格,以便Solr可以将查询拆分为与索引值匹配的术语。对于您的JOHN SMITH示例,以下内容应该有效:
q=cust_name:JOHN * SMITH
如果您在名称中的任何位置寻找JOHN或SMITH的出现,您也可以使用以下内容。但根据这个例子,听起来位置对你很重要。
q=cust_name:JOHN SMITH
此外,使用保留查询中的空格也可以搜索JOHN LENARD SMITH。
q=cust_name:JOHN LENARD SMITH
最后,我建议将LowerCaseTokenizerFactory添加到您的text_ws
字段,以便将字词编入索引并以小写字母进行搜索,否则由于案例差异,John * Smith
的搜索将不匹配
答案 1 :(得分:-1)
让用户在三个单独的字段中输入名称。连接结果。如果有任何空白,请用通配符替换。