我正在尝试改进基于elasticsearch的应用程序的全文搜索功能。我有未知的附加属性列表的文档,在索引文档后应该可以搜索,但我也有技术元数据的已知属性列表,所以我想从全文搜索中排除这些属性。
目前,此功能是使用fuzzy_like_this
查询实现的,此查询具有fields
属性,但您必须指定要搜索的所有字段的完整路径。在我的情况下,它不是一个选项,因为我事先并不知道字段列表,我想指定排除列表。
我已考虑使用this post中建议的解决方案为这些元数据字段将索引设置为否,但它也不是一个选项因为我需要通过某些字段进行过滤,因此我需要将它们编入索引。
我创建了issue on github,这完全适合我想要的东西,但它仍然是开放的。
有人可以帮助解决任何可能的解决方案或解决方法吗?
答案 0 :(得分:2)
默认情况下,将分析所有内容以进行全文搜索。您需要指定mapping以防止对字段进行分析。您可以通过向索引发送PUT请求来实现此目的。 示例映射可能如下所示:
{
"mappings": {
"test": {
"properties": {
"country": {
"type": "string",
"index": "not_analyzed"
},
"description": {
"type": "string"
},
"modified_date": {
"type": "date",
"format": "dateOptionalTime"
},
"posted_date": {
"type": "date",
"format": "dateOptionalTime"
},
"title": {
"type": "string"
}
}
}
}
}
您需要将其发送到您的索引。 E.g
curl -XPUT http://elasticsearch:9200/myindex/ -d '{MAPPING}'
有关详细信息,请参阅this link。请注意,您无法更改一次字段。因此,您需要先删除文档,然后发送映射。