Elasticsearch:从全文搜索中排除一些已知字段

时间:2014-10-08 11:23:20

标签: elasticsearch

我正在尝试改进基于elasticsearch的应用程序的全文搜索功能。我有未知的附加属性列表的文档,在索引文档后应该可以搜索,但我也有技术元数据的已知属性列表,所以我想从全文搜索中排除这些属性。

目前,此功能是使用fuzzy_like_this查询实现的,此查询具有fields属性,但您必须指定要搜索的所有字段的完整路径。在我的情况下,它不是一个选项,因为我事先并不知道字段列表,我想指定排除列表。

我已考虑使用this post中建议的解决方案为这些元数据字段将索引设置为,但它也不是一个选项因为我需要通过某些字段进行过滤,因此我需要将它们编入索引。

我创建了issue on github,这完全适合我想要的东西,但它仍然是开放的。

有人可以帮助解决任何可能的解决方案或解决方法吗?

1 个答案:

答案 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。请注意,您无法更改一次字段。因此,您需要先删除文档,然后发送映射。