1.我这边先拿pro_name做案例
<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
<field name="pro_name" type="string_ci" indexed="true" stored="true"/>
(1)我这边的是将这个字段的值全部转成小写,如值是KIT,但只有pro_name:kit,这样搜索才能搜到值
(2)想要模糊搜索字段的属性值是不能分词的。KeywordTokenizerFactory这个是让值不分词,LowerCaseFilterFactory是将字母全转成小写才能搜索
现在你们认为可以了吗,先看案例吧!
这样确实是搜到了3千多了,现在换个条件搜索
2.看见没这个并没有想数据库like那样,后来在网上找了好久才发现是转义符的问题
public static String transformMetachar(String input){
StringBuffer sb = new StringBuffer();
try{
String regex = "[+\\-&|!(){}\\[\\]^\"~*?:(\\)\\s]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while(matcher.find()){
matcher.appendReplacement(sb, "\\\\"+matcher.group());
}
matcher.appendTail(sb);
} catch(Exception e){
e.printStackTrace();
}
return sb.toString();
}
将刚刚的字符串放入得到od\ 2\ K,现在再搜索
好了,是不是很方便!!