在solr中我必须在我的数据库的'name'字段中获取uniqque值。
因为这个原因,我读到了分组,我得到了理想的结果
{
"responseHeader":{
"status":0,
"QTime":16,
"params":{
"indent":"true",
"q":"name:И*",
"group.field":"name",
"group":"true",
"wt":"json"}},
"grouped":{
"name":{
"matches":2231,
"groups":[{
"groupValue":"ИВАН",
"doclist":{"numFound":1144,"start":0,"docs":[
{
"obshtina":"ПЛОВДИВ",
"phone":"032/670309",
"timestamp":"2013-03-04T08:43:53.553Z"}]
}},
{
"groupValue":"ИЛИЯ",
"doclist":{"numFound":177,"start":0,"docs":[
{
"obshtina":"БРЕЗОВО",
"phone":"(3191)2265",
..............................
问题是,现在我注意到,不幸的是我有两组实际上是相同的'Иван'和'ИВАН'。问题是我的'name'字段应该是字符串类型所以我可以使用我需要的通配符,所以我不能使它成为文本例如并使用LowerCase过滤器
答案 0 :(得分:3)
您可以使用KeywordTokenizerFactory(绝对没有标记化,就像字符串字段一样)和LowerCaseFilterFactory来获得您想要的内容。
您仍然可以执行通配符搜索。
答案 1 :(得分:2)
添加到上一个答案,您可以使用新的Solr文本类型,如下所示,在索引时,只需将值存储为小写的单个标记。搜索时只需将搜索文本视为小写的单个标记。因此,您可以获得理想的效果。
<fieldType name="lcase" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>