elasticsearch针对两个字段搜索两组术语

lvjbypge  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(2)|浏览(318)

我正在尝试使用elasticsearch返回在两个字段中具有不同术语的文档。不知道怎么写这个,可能是这样的:

  1. query:
  2. field1: "term set #1"
  3. field2: "very different term set #2"

理想情况下,术语集应该是字符串数组。我希望所有的条款和字段点击率被或,这样最好的文件将有所有点击率在每个领域,但如果任何领域没有,那就可以了。

r6vfmomb

r6vfmomb1#

你可以用 Terms Query 以及 bool should 为了实现这一点,假设您希望在不进行分析的情况下匹配精确的值。世界之美 Terms Query 它隐式地处理一个值数组,并且隐式地是一个 OR 操作。

  1. {
  2. "query": {
  3. "bool": {
  4. "should": [
  5. {
  6. "terms": {
  7. "field1": [
  8. "field1 value1",
  9. "field1 value2",
  10. "field1 value3"
  11. ]
  12. }
  13. },
  14. {
  15. "terms": {
  16. "field2": [
  17. "field2 value1",
  18. "field2 value2",
  19. "field2 value3"
  20. ]
  21. }
  22. }
  23. ]
  24. }
  25. }
  26. }
展开查看全部
w6mmgewl

w6mmgewl2#

您可以从尝试下面的查询开始。这是一个非常简单的查询,可以找到 field1 比赛 term set one 或者 field2 比赛 very different term set two . 您不需要指定一个术语数组,因为es将在分析阶段为您提供帮助,即需要 term set one 把它分解成代币 term , set 以及 one 把它们和 field1 . 同样,对于 field2 .
还要注意,我已经指定了 or 运算符,尽管它是默认值,只是为了说明 and 你将来也会需要它的。

  1. {
  2. "query": {
  3. "bool": {
  4. "should": [
  5. {
  6. "match": {
  7. "field1": "term set one",
  8. "operator": "or"
  9. }
  10. },
  11. {
  12. "match": {
  13. "field2": "very different term set two",
  14. "operator": "or"
  15. }
  16. }
  17. ],
  18. "minimum_should_match": 1
  19. }
  20. }
  21. }

试试看,让我们知道进展如何。

展开查看全部

相关问题