solr - Solr - 使用 _text_ 包罗万象的字段
问题描述
我正在尝试在我的 Solr 核心中索引一个示例 JSON 文档,如下所示
[
{
"ID": "1",
"title": "Cooking Recommendations",
"tags": ["cooking", "meetup"],
"posts": [{
"ID": "2",
"title": "Cookies",
"comments": [{
"ID": "3",
"content": "Lovely recipe"
},
{
"ID": "4",
"content": "A-"
}
]
},
{
"ID": "5",
"title": "Cakes"
}
]
},
{
"ID": "6",
"title": "For Hire",
"tags": ["professional", "jobs"],
"posts": [{
"ID": "7",
"title": "Search Engineer",
"comments": [{
"ID": "8",
"content": "I am interested"
},
{
"ID": "9",
"content": "How large is the team?"
}
]
},
{
"ID": "10",
"title": "Low level Engineer"
}
]
}
]
现在,我更新了我的managed-schema.xml
文件以启用_text_
catch-all 字段,因为我想在不指定运行查询字符串的键的情况下进行自由文本查询。
这就是我的架构的外观
<field name="_root_" type="text_general" indexed="false" stored="true" docValues="false" />
<field name="_nest_path_" type="_nest_path_" />
<fieldType name="_nest_path_" class="solr.NestPathField" />
<field name="_text_" type="text_general" indexed="true" stored="true" multiValued="true"/>
<copyField source="*" dest="_text_"/>
对应的分析仪
<fieldType name="_text_" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.SnowballPorterFilterFactory" language="German" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.SnowballPorterFilterFactory" language="German" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
使用这个配置,JSON 文档可以很好地被索引,我可以运行一个查询,比如title:"Cooking Recommendations"
单独检索第一个 JSON 对象。但是,我试图在不指定键的情况下运行自由文本查询,title
而只是传递查询字符串来获取相同的结果。我查看了 Solr 文档,发现我可以使用CopyField
指令来实现这一点,但是,如果我只是传递字符串“Cooking Recommendations”,我不会得到任何结果。
我确实看到了核心的架构,并看到该_text_
字段可用。不知道我在这里缺少什么。有人可以指导我吗?
编辑:
我正在使用 Solr 查询 UI 执行查询,如下所示:
我/select
用作请求处理程序,将 df 作为_text_
. 尽管如此,它并没有返回我期望的结果。
编辑2:
我尝试使用下面建议的分析选项卡,发现它在那里工作正常。
解决方案
检查solrconfig.xml
Solr 附带的文件,您会看到/select requestHandler
.
<str name="df">name</str>
它在
<lst name="defaults"> </lst>
标签中配置了默认搜索字段,如下所示
。
使用标记requestHandler
您要使用哪个作为默认值default="true"
。
推荐阅读
- r - 将一行熔化/拆分为两行,使用原始行中的两个列值,其余部分保持不变
- java - 为什么在 Apache Pulsar 中使用 MessageListeners 而不仅仅是 Consumer.receive()?
- python - Adafruit MM8451 & Raspberry PI SPI 错误 121 与 Buster
- amazon-cloudformation - AWS CloudFormation 堆栈升级失败并显示“无法满足 100% MinSuccessfulInstancesPercent 要求”
- flutter - Flutter 文档选择器
- sql - Oracle:使用 where 子句选择重复项?
- excel - 如何使“@”符号在 VBA 宏内的公式中起作用?
- vue.js - 在使用 v-for 的 VueJS 中,这种结构可能吗?
- php - MeDoo - WHERE 部分中的条件 LIKE
- java - 应用程序在尝试添加标记时抛出异常“不在主线程中”