如何在Elasticsearch中组合属性/字段



在设计应用程序时,我想知道ElasticSearch是否是实现它的合适工具(以及如何实现它)。任何建议都将不胜感激!

我的应用程序需要存储(许多)文档,每个文档都表示为一个单词序列。我还想把信息与每个单词联系起来。例如,假设我想将单词长度与每个单词相关联。所以我会有这样的东西:

The      house   is      yellow
3        5       2       6

现在,我想执行诸如"给我长度为2的单词,后跟单词‘yellow’"之类的查询。在关系数据库中,我会将单词的形式和长度存储为不同的属性,例如:

Word        Length        N
---------------------------
the           3           1
house         5           2
is            2           3
yellow        6           4

(其中N是单词的位置),在SQL中,我会做这样的东西:

SELECT word, N1 as N
FROM   documents
WHERE  (word=”yellow” AND N1 in (SELECT N2 as N
FROM documents
WHERE length=2 AND (N1-N2=1 OR N2-N1=1)
)
)

我很难在ElasticSearch中实现同样的功能。我已经阅读了在线手册和参考书,但我不知道如何使用ES。因此,非常感谢您的任何建议。

考虑:数据库将有许多与单词相关联的属性,我需要查询它们的任何组合。这些属性是预先计算好的,并离线加载到数据库中。

谢谢!

首先,感谢您的回答。我已经阅读了关于自定义分析器的信息和示例,但我仍然不知道如何做到这一点

这是我所做的文档映射:

"mappings" : {
"Sentence": {
"properties" : {
"word":{
"type":"string",
"index" : "not_analyzed"
},
"attributes":{
"properties":{
"length”: {
"type": "integer",
"index_analyzer": "standard"
},
"N": {
"type": "integer",
"index_analyzer": "standard" 
}
}
} 
}
}
}

这是索引文档:

curl -XPUT http://localhost:9200/documents/Sentence/1 -d '
{
"Sentence":[                  
{"word":"the",     
"attributes":{          
"length”:3,
"N":1
}
},
{"word":"house",
"attributes":{
"length”:5,
"N":2
}
},
{"word":"is",
"attributes":{
"length”:2,
"N":3
}
},
{"word":"yellow",
"attributes":{
"length”:6,
"N":4
}
}
]
}';

我尝试使用span查询执行上一个查询("给我长度为2的单词,后面跟着单词‘yellow’"):

curl -XPOST http://localhost:9200/documents/Sentence/_search?pretty -d '
{
"query": {
"span_near": {
"clauses": [
{"span_term" : {"word":"yellow"}},
{"span_term" : {"length”:2}}
],
"slop":0
}
}
}';

但我不能这么做,因为子句必须有相同的字段。所以我放弃了那个选项(span查询)。

如何创建自定义分析器来执行我想要的查询?

谢谢。

相关内容

  • 没有找到相关文章

最新更新