如何进行只查找名字和姓氏的查询

时间:2013-02-20 18:27:42

标签: solr

问题在于:我有一个列(名为customername),其中包含示例“JOHN LENARD SMITH”等的名称。

所以我想做一个查询,它将获得名字为'JOHN'且姓氏为'SMITH'的所有名字;第二个名字并不重要,所以我会放*通配符。

还有一个更大的问题:如果用户写“JOHN LENARD SMITH”找到这个确切的人,我应该能够这样做

我的尝试:

1。 我创建了text_ws字段并测试了以下查询: 问题是这样的:我有一个列(命名名称),其中包含示例“ИванКириловПетров”,“НинаСемоваМариножа”等的名称。

所以我想做一个查询,它将获得名字'Иван'和姓氏'Петров'的所有名字;第二个名字并不重要,所以我会放*通配符。

还有一个更大的问题:如果用户写“ИванКириловПетров”以找到这个确切的人,我应该能够

我的尝试:

我创建了text_ws字段并测试了以下查询:

q=cust_name:JOHN*SMITH


q=cust_name:/JOHN.*SMITH/

什么都行不通!我绝望地认为我永远不会解决这个问题。

2 个答案:

答案 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)

让用户在三个单独的字段中输入名称。连接结果。如果有任何空白,请用通配符替换。