我正在使用Nutch爬网网站并将其编入Elastic搜索中。我的网站有元标记,其中一些包含逗号分隔的ID列表(我打算将其用于搜索)。例如:

contentTypeIds =“2,5,15”。 (注意:没有方括号)。

当ES对此进行索引时,我无法搜索contentTypeIds:5并找不到其contentTypeIds包含5的文档;此查询仅返回其contentTypeIds恰好为“5”的文档。但是,我确实要查找其contentTypeIds包含5的文档。

在Solr中,这可以通过在schema.xml中将contentTypeIds字段设置为multiValued =“true”来解决。我找不到如何在ES中执行类似的操作。

我是ES的新手,所以我可能错过了一些东西。谢谢你的帮助!

最佳答案

创建custom analyzer,它将用逗号将索引文本拆分为标记。

然后,您可以尝试搜索。如果您不关心相关性,可以使用过滤器搜索文档。我的示例显示了如何尝试使用term filter进行搜索。

在下面,您可以找到如何使用Sense插件执行此操作。

DELETE testindex

PUT testindex
{
    "index" : {
        "analysis" : {
            "tokenizer" : {
                "comma" : {
                    "type" : "pattern",
                    "pattern" : ","
                }
            },
            "analyzer" : {
                "comma" : {
                    "type" : "custom",
                    "tokenizer" : "comma"
                }
            }
        }
    }
}

PUT /testindex/_mapping/yourtype
{
        "properties" : {
            "contentType" : {
                "type" : "string",
                "analyzer" : "comma"
            }
        }
}

PUT /testindex/yourtype/1
{
    "contentType" : "1,2,3"
}

PUT /testindex/yourtype/2
{
    "contentType" : "3,4"
}

PUT /testindex/yourtype/3
{
    "contentType" : "1,6"
}

GET /testindex/_search
{
    "query": {"match_all": {}}
}

GET /testindex/_search
{
    "filter": {
        "term": {
           "contentType": "6"
        }
    }
}

希望能帮助到你。

关于elasticsearch - 在Elastic Search中索引逗号分隔的值字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31143136/

10-15 22:46