【发布时间】:2016-12-20 14:54:50
【问题描述】:
我正在尝试使用 in the Solr docs 中描述的术语组件(请参阅将术语组件用于自动建议功能)。
先决条件
运行 Solr 6.3.0。
我的索引中目前有 4 个文档:
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"*:*",
"indent":"on",
"wt":"json",
"_":"1482239790124"}},
"response":{"numFound":4,"start":0,"docs":[
{
"id":"1",
"title":["There's nothing better than a shiny red apple on hot summer day."],
"_version_":1554244409915080704},
{
"id":"2",
"title":["Eat an apple!"],
"_version_":1554244409917177856},
{
"id":"3",
"title":["I prefer a Grannie Smith apple over Fuji."],
"_version_":1554244409917177857},
{
"id":"4",
"title":["Apricots is kinda like a peach minus the fuzz."],
"_version_":1554244409917177858}]
}
}
我的字段定义如下所示(否则我的 scheme.xml 是 vanilla):
<field name="title" type="strings" indexed="true" stored="true"/>
我的条款组件是默认的(就像我的整个 solarconfig.xml 一样):
<searchComponent name="terms" class="solr.TermsComponent"/>
<requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<bool name="terms">true</bool>
<bool name="distrib">false</bool>
</lst>
<arr name="components">
<str>terms</str>
</arr>
</requestHandler>
问题
在发出http://localhost:8983/solr/test/terms?terms.fl=title&terms.prefix=ap 之类的请求时,我期望得到以下回报:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
</lst>
<lst name="terms">
<lst name="title">
<int name="apple">3</int>
<int name="Apricots">1</int>
</lst>
</lst>
</response>
但我实际上得到的是一个空洞的回应。
当我改为 http://localhost:8983/solr/test/terms?terms.fl=title&terms.prefix=Ea 时,我得到:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
</lst>
<lst name="terms">
<lst name="title">
<int name="Eat an apple!">1</int>
</lst>
</lst>
</response>
所以它有点工作,但不区分大小写,仅基于字符串的开头。
目标
使其适用于标题字段中包含的所有单词(如在文档中)并使搜索不区分大小写。
试图解决它
- 我弄乱了标题字段:明确设置
indexed和stored;设置multiValued=false;试过type=string。 - 我尝试了各种Terms组件参数
- 尝试使用 facets (see docs) 实现类似的东西,但遇到了同样的问题。
我猜测它与数据类型或Solr如何存储字段有关,但我无法弄清楚。
【问题讨论】: