我在模式中添加了一个使用EdgeNgramFilter作为分析器的字段类型。
{
"add-field-type" : {
"name":"text_edge_ngram",
"class":"solr.TextField",
"positionIncrementGap":"100",
"analyzer" : {
"tokenizer":{
"class":"solr.WhitespaceTokenizerFactory" },
"filters":[
{"class":"solr.LowerCaseFilterFactory"},
{ "class":"solr.EdgeNGramFilterFactory",
"minGramSize":"1",
"maxGramSize":"4"}
]
}
}
}
此外,我已将此类型分配给一个字段:
{
"replace-field" : {
"name":"MyField",
"type":"text_edge_ngram",
"uninvertible":true,
"indexed":true,
"stored":true
}
}
我已经重新索引了我的文档,但现在下面的查询没有返回预期的结果。下面是一个例子:
.../select?q=aweso
没有结果
但是,如果我查询单一字段
.../select?q=MyField:aweso
,我得到了"真棒"的结果。
如果有人能解释发生了什么,或者给我如何排除故障的提示,那就太好了。
您需要在/query
请求处理程序下的solrconfig.xml
文件中设置默认搜索字段或设置为IntParams
默认参数值在solrconfig.xml
中指定,或由请求中的查询时间值覆盖。
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="df">MyField</str>
</lst>
</requestHandler>
我不喜欢使用ConfigAPI来更新solr cofing设置,并将默认配置直接保存在solrconfig.xml
文件中。
以下配置适用于您定义的几个请求处理程序:
<initParams path="/select,/get,standard">
<lst name="defaults">
<str name="df">term1 term2</str>
<str name="q.op">AND</str>
</lst>
</initParams>
这个示例SearchHandler声明展示了声明了许多默认值的SearchHandler。请注意,同一请求处理程序的多个实例(SearchHandler(可以多次注册到不同的名称(和不同的初始化参数(