隐藏

solr按指定字符串进行分词,拥有重复值,如何进行完全匹配查询

发布:2022/10/19 16:15:04作者:管理员 来源:本站 浏览次数:826

比如solr里面有几条索引,分别如下:
索引1: A|B|C|A|B|C
索引2: A|A|A|B|B|B
索引3: C|C|C|A|A|A
索引4: A|B|A|B|A|B
...
...

我输入的关键字q为 :A|A|B|B|A|B,按“|”进行分词,分词后的结果为 A,A,B,B,A,B,即3个A,3个B,去solr进行查询,我想把索引当中包含3个A并且是3个B的查询出来,即完全匹配,我想得到的的结果是索引2跟索引4两条结果。可是对于索引1,它分词后为A,B,C,A,B,C,也是会查询出来的,因为它包含了A,B,但是这个不是我想要的结果,我需要的是完全匹配,即结果是3个A跟3个B,并不是包含A跟B,请问有好的解决办法吗?试着用mm=6这个参数,可是结果还是不行。

解决方案

solr查询,查询配置了查询分词器的字段,默认会对查询关键字做分词处理
1、如查询关键字F1501ZY000011,使用solr7自带的中文分词器,默认会分词为:f,1501,zy,000011
2、不使用defType=edismax参数的查询结果
二、使用参数defType=edismax&mm=100%,指定查询关键字分词后,满足匹配所有
三、.net的solrj中指定defType=edismax参数
List<KeyValuePair<string, string>> ss = new List<KeyValuePair<string, string>>();
                ss.Add(KV.Create("wt", "xml"));
                ss.Add(KV.Create("defType", "edismax"));
                ss.Add(KV.Create("mm", "100%"));
                options.ExtraParams = ss;