我使用Nutch抓取网站并将其编入索引进入弹性搜索。我的网站有元标记,其中一些包含以逗号分隔的ID列表(我打算用于搜索)。例如:
contentTypeIds =" 2,5,15&#34 ;. (注意:没有方括号)。
当ES为此编制索引时,我无法搜索contentTypeIds:5并查找其contentTypeIds 包含 5的文档;此查询仅返回其contentTypeIds正好为" 5"的文档。但是,我确实希望找到contentTypeIds包含5的文档。
在Solr中,这可以通过将contentTypeIds字段设置为multiValued =" true"来解决。在schema.xml中。我无法找到如何在ES中做类似的事情。
我是ES的新手,所以我可能错过了一些东西。谢谢你的帮助!
答案 0 :(得分:13)
创建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"
}
}
}
希望它有所帮助。