我是 Elasticsearch 新手,所以不知道如何正确开始执行以下任务。
我有一个索引,其中的文档包含两种类型的字段:
- 地址:包含城市和街道的字符串;
- houses:房屋编号列表(整数)。
通常情况下,我可以通过以下查询搜索此文档:
(1)
GET /_search
{
"query":{
"bool":{
"should": [
{"match": {"address": "Gotham Fourteenth street"}},
{"match": {"houses": 33}}
]
}
}
}
我的目标是通过单个字符串匹配此类记录,例如:
(2)
GET /_search
{
"query":{
"bool":{
"should": [
{"match": {"address": "Gotham Fourteenth street 33"}}
]
}
}
}
甚至:
curl -X GET 'http://localhost:9200/_search?q=Gotham+Fourteenth+street+33'
即将查询(2)转换为(1),即从'address'中删除门牌号'33'并将其作为'houses'匹配参数执行搜索之前的相同查询。
我想我可以用 Java 创建一个插件,从“地址”中提取门牌号(解析不是问题),并添加一个带有该值的额外参数“houses”。
因此我的问题是:
- 在我的插件中,如何在执行搜索之前以编程方式向查询添加额外的匹配参数“houses”?
- 如何从“地址”参数中删除尾随的门牌号码标记?
最佳答案
curl -X GET 'http://localhost:9200/_search?q=address:"哥谭十四街"
curl -X GET 'http://localhost:9200/_search?q=address:"哥谭十四街"AND (houses=13)
还结帐wildcards
关于java - Elasticsearch自定义插件: Add extra query parameter before search,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45637940/