我们有一个ElasticSearch索引(ES版本6.4.2),其中包含100+百万个文档,每个文档包含大约5个字段。这些字段之一是新闻文章的全文。
问题是,现在,我们在该索引上的搜索需要花费5-6秒钟以上的时间才能返回结果,而我们所有其他索引(典型的结构化记录)都需要不到一秒钟的时间。事实是,我们根本不需要在查询时在包含新闻文本的字段内进行搜索,但我们确实希望在结果中返回该字段。
我在这里假设的是,所有这些新闻文本都在ES缓存中,并且可以满足这些漫长的搜索时间,而这些时间甚至根本不需要,因为我们无需搜索它们。是否有一种方法,因为缺少更好的表达方式,因此将新闻文本字段排除在所有ES进程/缓存之外,但实际上仍在结果中返回该字段?我正在尝试测试提高此索引搜索速度的方法。
答案 0 :(得分:2)
有两种方法可以解决此问题:
1。。将"index": false
设置为不可搜索的字段。阅读this。
{
"fNews": {
"type": "text",
"index": false
}
}
2。。如果您使用query_string查询进行搜索,则设置应在其上进行搜索的字段。假设您有3个字段f1
,f2
和fNews
,并且您不想在fNews
上进行搜索,那么查询将类似于以下内容:
{
"query": {
"query_string": {
"fields": [
"f1",
"f2"
],
"query": "some search string"
}
}
}