0

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

所以我想进行一个查询,它将获取所有名字为“JOHN”和姓氏为“SMITH”的名字;第二个名字无关紧要,所以我会放 * 通配符。

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

我尝试过的:

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

所以我想进行一个查询,它将获取所有名字为“Иван”和姓氏“Петров”的名字;第二个名字无关紧要,所以我会放 * 通配符。

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

我尝试过的:

我制作了字段 text_ws 类型并测试了以下查询:

q=cust_name:JOHN*SMITH


q=cust_name:/JOHN.*SMITH/

没有任何效果!我绝望了,我想我永远不会解决这个任务。

4

2 回答 2

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将不匹配。

于 2013-02-20T19:17:12.067 回答
-1

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

于 2013-02-20T18:36:34.560 回答