【问题标题】:Elasticsearch: Exclude some known fields from full text seachElasticsearch:从全文搜索中排除一些已知字段
【发布时间】:2014-10-08 19:44:29
【问题描述】:

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

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

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

我创建了issue on github,它非常适合我想要的,但它仍然是开放的。

有人可以在这里提供任何可能的解决方案或解决方法吗?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    默认情况下,将分析所有内容以进行全文搜索。您需要指定 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"
                    }
                }
            }
        }
     }
    

    您需要将其发送到您的索引。例如

    curl -XPUT http://elasticsearch:9200/myindex/ -d '{MAPPING}'

    请参阅this link 了解更多信息。请注意,您不能更改一次字段。因此,您需要先删除您的文档,然后再发送映射。

    【讨论】:

    • 如果您将特定字段的映射设置为non_analyzed,则不会仅对其进行分析,而是会对该字段的实际值进行索引,并且可以使用全文搜索进行搜索。
    • 查看我最后给出的链接:elasticsearch.org/guide/en/elasticsearch/guide/current/…。您可以设置 index:no 使其不可搜索
    • index:no 也使它不可过滤,但我需要按此字段过滤。
    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 2019-09-11
    相关资源
    最近更新 更多