我们正试图使用Elasticsearch为大量书籍(大约100.000.000个单词)编制索引。以前每个单词都有一个ID,这里用HTML表示:
<span class="w" id="lb441882_1235">A</span>
<span class="w" id="lb441882_1237">cold</span>
<span class="w" id="lb441882_1239">morning</span>
我们需要在搜索语料库时检索这些ID。 到目前为止我们有什么:
我们使用定界有效载荷过滤器:
{
"type" : "delimited_payload_filter",
"encoding" : "identity",
"delimiter" : "|"
}
将文字存储为token|ID
,例如A|lb441882_1235 cold|lb441882_1237 morning|lb441882_1239
将有效负载返回到突出显示搜索结果中的<em>
标记内,然后手动拆分|。
'highlight': {'text': ['A|lb441882_1235 <em>cold|lb441882_1237</em> morning|lb441882_1239']}
由于需要手动清洁,这看起来很麻烦,但我们还没有找到更整洁的解决方案。
问题:
Q1。有没有更好的方法来对有效负载文本运行查询,该结果会在其自己的字段中提供有效负载数据?理想情况下,hightlight会提供偏移索引和有效负载数据,而不是输出html标记,理想情况某些看起来更像_termvectors
的数据(在此示例中):
{
"highlight": [
{
"hit" : "cold",
"position" : 1,
"start_offset" : 2,
"end_offset" : 6,
"payload" : "lb441882_1237"
}
]
}
有没有这样的东西?
Q2。有效载荷是否是实现此目的的最佳方式,还是我们应该更加关注自定义分析仪?我们已经查看了本文链接的插件,但无法安装它: https://discuss.elastic.co/t/can-elastic-run-complex-search-using-annotated-tokens/29630/6