看起来这也可能非常适合Percolator。
您可以将查询作为单独索引上的文档进行索引,然后渗透您的文档以了解它们匹配哪些查询。看看percolate API。
您需要创建一个索引(使用create index API),我们称之为 test 例如:
curl -XPUT localhost:9200/test
然后注册我们的“布宜诺斯艾利斯”查询并为其命名。正如 DrTech 在他的回答中建议的那样,匹配短语查询似乎是一个不错的选择。
curl -XPUT localhost:9200/_percolator/test/buenosaires -d '{
"query" : {
"match_phrase" : {
"text" : "Buenos Aires"
}
}
}'
然后渗透,这意味着我们发送一个文档,然后我们返回它与我们之前索引的查询中的哪些查询匹配:
curl -XGET localhost:9200/test/type1/_percolate -d '{
"doc" : {
"city" : "This is an example of some text written from Buenos Aires about Meat"
}
}'
在这种情况下,您应该返回以下 json,其中 buenosaires 是我们在索引查询时为查询指定的名称:
{"ok":true, "matches":["buenosaires"]}
DrTech 的回答非常好。我认为主要区别在于您的文字实际在哪里。如果它已经在 elasticsearch 中被索引,那么最好的策略是进行命名查询以在单个请求中获取您的文档匹配的那些。
另一方面,如果您要索引数据并且需要在实际索引它们之前丰富您的文档,那么 percolator 可能更适合。
希望这可以帮助!