Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP弹性搜索过滤查询字符串搜索_Php_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Php,elasticsearch" /> elasticsearch,Php,elasticsearch" />

PHP弹性搜索过滤查询字符串搜索

PHP弹性搜索过滤查询字符串搜索,php,elasticsearch,Php,elasticsearch,所有人都希望使用过滤查询,其中结果应包含来自“查询字符串”和应用的“术语-过滤器”的数据 预期结果是: 所有包含字母“a”或“”且主题id为10的博客记录 还有主题id为10的其他记录,即使描述为空 因此,最终结果应该是-分数较高且位于顶部的匹配记录,然后这些记录仅与过滤器中的“主题id”匹配。实现这一点的一种方法是使用描述字段的映射。多字段中的一个字段应为非分析字段。 数据重新编制索引后,您可以使用简单的 例子 创建索引: put test { "mappings"

所有人都希望使用过滤查询,其中结果应包含来自“查询字符串”和应用的“术语-过滤器”的数据

预期结果是:

  • 所有包含字母“a”或“”且主题id为10的博客记录
  • 还有主题id为10的其他记录,即使描述为空

  • 因此,最终结果应该是-分数较高且位于顶部的匹配记录,然后这些记录仅与过滤器中的“主题id”匹配。

    实现这一点的一种方法是使用
    描述
    字段的映射。多字段中的一个字段应为非分析字段。
    数据重新编制索引后,您可以使用简单的

    例子 创建索引:

    put test
    {
        "mappings": {
            "data" : {
                "properties": {
                    "description" : {
                        "type": "string",
                         "fields": {
                            "raw" : {"type": "string","index": "not_analyzed"}
                         }
                    }
                }   
            }
        }
    }
    
    put test/data/1 
    {
        "description" : "a",
        "test_id" : 10
    }
    put test/data/2
    {
        "description" : "",
        "test_id" : 10
    }
    
    put test/data/3
    {
        "description" : "hello",
        "test_id" : 10
    }
    
    
    put test/data/4
    {
        "description": "a",
        "test_id" : 20
    }
    
    post test/data/_search
    {
       "query": {
          "filtered": {
             "query": {
                "bool": {
                   "disable_coord": "true",
                   "should": [
                      {
                         "query_string": {
                            "fields": [
                               "description"
                            ],
                            "query": "a"
                         }
                      },
                      {
                         "constant_score": {
                            "filter": {
                               "term": {
                                  "description.raw": ""
                               }
                            },
                            "boost": 0.2
                         }
                      },
                      {
                         "constant_score": {
                            "filter": {
                               "exists": {
                                  "field": "description"
                               }
                            },
                            "boost": 0.1
                         }
                      }
                   ]
                }
             },
             "filter": {
                "terms": {
                   "test_id": [
                      10
                   ]
                }
             }
          }
       }
    }
    
     "hits": [
             {
                "_index": "test",
                "_type": "data",
                "_id": "1",
                "_score": 0.5113713,
                "_source": {
                   "description": "a",
                   "test_id": 10
                }
             },
             {
                "_index": "test",
                "_type": "data",
                "_id": "2",
                "_score": 0.29277003,
                "_source": {
                   "description": "",
                   "test_id": 10
                }
             },
             {
                "_index": "test",
                "_type": "data",
                "_id": "3",
                "_score": 0.097590014,
                "_source": {
                   "description": "hello",
                   "test_id": 10
                }
             }
          ]
    
    索引数据:

    put test
    {
        "mappings": {
            "data" : {
                "properties": {
                    "description" : {
                        "type": "string",
                         "fields": {
                            "raw" : {"type": "string","index": "not_analyzed"}
                         }
                    }
                }   
            }
        }
    }
    
    put test/data/1 
    {
        "description" : "a",
        "test_id" : 10
    }
    put test/data/2
    {
        "description" : "",
        "test_id" : 10
    }
    
    put test/data/3
    {
        "description" : "hello",
        "test_id" : 10
    }
    
    
    put test/data/4
    {
        "description": "a",
        "test_id" : 20
    }
    
    post test/data/_search
    {
       "query": {
          "filtered": {
             "query": {
                "bool": {
                   "disable_coord": "true",
                   "should": [
                      {
                         "query_string": {
                            "fields": [
                               "description"
                            ],
                            "query": "a"
                         }
                      },
                      {
                         "constant_score": {
                            "filter": {
                               "term": {
                                  "description.raw": ""
                               }
                            },
                            "boost": 0.2
                         }
                      },
                      {
                         "constant_score": {
                            "filter": {
                               "exists": {
                                  "field": "description"
                               }
                            },
                            "boost": 0.1
                         }
                      }
                   ]
                }
             },
             "filter": {
                "terms": {
                   "test_id": [
                      10
                   ]
                }
             }
          }
       }
    }
    
     "hits": [
             {
                "_index": "test",
                "_type": "data",
                "_id": "1",
                "_score": 0.5113713,
                "_source": {
                   "description": "a",
                   "test_id": 10
                }
             },
             {
                "_index": "test",
                "_type": "data",
                "_id": "2",
                "_score": 0.29277003,
                "_source": {
                   "description": "",
                   "test_id": 10
                }
             },
             {
                "_index": "test",
                "_type": "data",
                "_id": "3",
                "_score": 0.097590014,
                "_source": {
                   "description": "hello",
                   "test_id": 10
                }
             }
          ]
    
    查询:

    put test
    {
        "mappings": {
            "data" : {
                "properties": {
                    "description" : {
                        "type": "string",
                         "fields": {
                            "raw" : {"type": "string","index": "not_analyzed"}
                         }
                    }
                }   
            }
        }
    }
    
    put test/data/1 
    {
        "description" : "a",
        "test_id" : 10
    }
    put test/data/2
    {
        "description" : "",
        "test_id" : 10
    }
    
    put test/data/3
    {
        "description" : "hello",
        "test_id" : 10
    }
    
    
    put test/data/4
    {
        "description": "a",
        "test_id" : 20
    }
    
    post test/data/_search
    {
       "query": {
          "filtered": {
             "query": {
                "bool": {
                   "disable_coord": "true",
                   "should": [
                      {
                         "query_string": {
                            "fields": [
                               "description"
                            ],
                            "query": "a"
                         }
                      },
                      {
                         "constant_score": {
                            "filter": {
                               "term": {
                                  "description.raw": ""
                               }
                            },
                            "boost": 0.2
                         }
                      },
                      {
                         "constant_score": {
                            "filter": {
                               "exists": {
                                  "field": "description"
                               }
                            },
                            "boost": 0.1
                         }
                      }
                   ]
                }
             },
             "filter": {
                "terms": {
                   "test_id": [
                      10
                   ]
                }
             }
          }
       }
    }
    
     "hits": [
             {
                "_index": "test",
                "_type": "data",
                "_id": "1",
                "_score": 0.5113713,
                "_source": {
                   "description": "a",
                   "test_id": 10
                }
             },
             {
                "_index": "test",
                "_type": "data",
                "_id": "2",
                "_score": 0.29277003,
                "_source": {
                   "description": "",
                   "test_id": 10
                }
             },
             {
                "_index": "test",
                "_type": "data",
                "_id": "3",
                "_score": 0.097590014,
                "_source": {
                   "description": "hello",
                   "test_id": 10
                }
             }
          ]
    
    结果:

    put test
    {
        "mappings": {
            "data" : {
                "properties": {
                    "description" : {
                        "type": "string",
                         "fields": {
                            "raw" : {"type": "string","index": "not_analyzed"}
                         }
                    }
                }   
            }
        }
    }
    
    put test/data/1 
    {
        "description" : "a",
        "test_id" : 10
    }
    put test/data/2
    {
        "description" : "",
        "test_id" : 10
    }
    
    put test/data/3
    {
        "description" : "hello",
        "test_id" : 10
    }
    
    
    put test/data/4
    {
        "description": "a",
        "test_id" : 20
    }
    
    post test/data/_search
    {
       "query": {
          "filtered": {
             "query": {
                "bool": {
                   "disable_coord": "true",
                   "should": [
                      {
                         "query_string": {
                            "fields": [
                               "description"
                            ],
                            "query": "a"
                         }
                      },
                      {
                         "constant_score": {
                            "filter": {
                               "term": {
                                  "description.raw": ""
                               }
                            },
                            "boost": 0.2
                         }
                      },
                      {
                         "constant_score": {
                            "filter": {
                               "exists": {
                                  "field": "description"
                               }
                            },
                            "boost": 0.1
                         }
                      }
                   ]
                }
             },
             "filter": {
                "terms": {
                   "test_id": [
                      10
                   ]
                }
             }
          }
       }
    }
    
     "hits": [
             {
                "_index": "test",
                "_type": "data",
                "_id": "1",
                "_score": 0.5113713,
                "_source": {
                   "description": "a",
                   "test_id": 10
                }
             },
             {
                "_index": "test",
                "_type": "data",
                "_id": "2",
                "_score": 0.29277003,
                "_source": {
                   "description": "",
                   "test_id": 10
                }
             },
             {
                "_index": "test",
                "_type": "data",
                "_id": "3",
                "_score": 0.097590014,
                "_source": {
                   "description": "hello",
                   "test_id": 10
                }
             }
          ]
    
    查询空字符串:

    {
       "query": {
          "filtered": {
             "query": {
                "bool": {
                   "disable_coord": "true",
                   "should": [
                      {
                         "query_string": {
                            "fields": [
                               "description"
                            ],
                            "query": ""
                         }
                      },
                      {
                         "constant_score": {
                            "filter": {
                               "term": {
                                  "description.raw": ""
                               }
                            },
                            "boost": 0.2
                         }
                      },
                      {
                         "constant_score": {
                            "filter": {
                               "exists": {
                                  "field": "description"
                               }
                            },
                            "boost": 0.1
                         }
                      }
                   ]
                }
             },
             "filter": {
                "terms": {
                   "test_id": [
                      10
                   ]
                }
             }
          }
       }
    } 
    
    结果:

      "hits": [
             {
                "_index": "test",
                "_type": "data",
                "_id": "2",
                "_score": 1.3416407,
                "_source": {
                   "description": "",
                   "test_id": 10
                }
             },
             {
                "_index": "test",
                "_type": "data",
                "_id": "1",
                "_score": 0.44721356,
                "_source": {
                   "description": "a",
                   "test_id": 10
                }
             },
             {
                "_index": "test",
                "_type": "data",
                "_id": "3",
                "_score": 0.44721356,
                "_source": {
                  "description": "hello",
                   "test_id": 10
                }
             }
          ]
    
    您考虑过使用查询吗?选中此查询,它将对您正常工作

    所有包含字母“a”且主题id为10的博客记录。

    {
      "filter": {
        "and": [
          {
            "in": {
              "topic_id": [
                "10"
              ]
            }
          },
          {
            "query": {
              "filtered": {
                "filter": {
                  "bool": {
                    "should": [
                      {
                        "query": {
                          "wildcard": {
                            "description": {
                              "value": "*a*"
                            }
                          }
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
        ]
      }
    }
    
    {
      "filter": {
        "and": [
          {
            "in": {
              "topic_id": [
                "10"
              ]
            }
          },
          {
            "not": {
              "query": {
                "filtered": {
                  "filter": {
                    "bool": {
                      "should": [
                        {
                          "query": {
                            "wildcard": {
                              "description": {
                                "value": "*a*"
                              }
                            }
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          }
        ]
      }
    }
    
    还有主题id为10的其余记录,即使描述为空。这将返回与通配符不匹配的所有其他记录。

    {
      "filter": {
        "and": [
          {
            "in": {
              "topic_id": [
                "10"
              ]
            }
          },
          {
            "query": {
              "filtered": {
                "filter": {
                  "bool": {
                    "should": [
                      {
                        "query": {
                          "wildcard": {
                            "description": {
                              "value": "*a*"
                            }
                          }
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
        ]
      }
    }
    
    {
      "filter": {
        "and": [
          {
            "in": {
              "topic_id": [
                "10"
              ]
            }
          },
          {
            "not": {
              "query": {
                "filtered": {
                  "filter": {
                    "bool": {
                      "should": [
                        {
                          "query": {
                            "wildcard": {
                              "description": {
                                "value": "*a*"
                              }
                            }
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          }
        ]
      }
    }
    
    仅查找主题id为10的空“”说明字段。试试这个,

    {
      "filter": {
        "and": [
          {
            "in": {
              "topic_id": [
                "10"
              ]
            }
          },
          {
            "query": {
              "filtered": {
                "filter": {
                  "script": {
                    "script": "_source.description.length() == 0"
                  }
                }
              }
            }
          }
        ]
      }
    }
    

    适用于ES 2.x

    使用
    bool
    查询应该可以做到这一点

    以下是我将使用的查询:

    GET blog/_search
    {
      "query": {
        "bool": {
          "should": [
            {
              "query_string": {
                "fields": [ "description" ],
                  "query": "a"
              }
            }
          ],
          "must": [
            {
              "terms": {
                "topic_id": [
                  10
                ]
              }
            }
          ]
        }
      }
    }
    
    在这里,bool查询的
    should
    子句将告诉ElasticSearch,应该返回与
    query\u字符串
    匹配的文档。在<代码> QueReSype字符串中,如果您想匹配包含<代码> A<代码>的任何文档,请考虑使用通配符。 例如
    “查询字符串”:{“查询”:“*a*”}

    另一方面,
    must
    子句将说明,为了将文档视为有效匹配,它必须在
    topic\u id
    字段中包含
    10
    should
    子句是否匹配


    我希望这能对您有所帮助。

    当使用“a”搜索时,我只得到描述中包含字母“a”的数据,但我也需要主题id为10的空(“”)描述数据。同样,当使用空白(“”)搜索时,不会获取任何数据。但是我希望数据的描述为空,主题id为10。问题中提到了我正在尝试的查询。这可能@keety,您提供的链接不会有多大帮助,因为我希望根据
    query
    添加两个匹配项,以及空搜索,但使用
    topic\u id
    值的过滤器。我在问题中提到的条件1。@kunaldese请检查我的答案。我想这就是你要找的。希望它能帮助我尝试一下。@kunaldeshe好奇的是,上面的操作没有按预期进行吗?当搜索文本为空(“”)时,我得到的结果是,只返回描述为空的数据。但我也希望返回非空值,但稍后返回结果。空描述应优先于非空描述。如果您搜索“a”,您希望搜索“a”,结果后面是空字符串,后面是非空和非-a的其余文档。类似地,如果你在搜索结果中搜索空的,你喜欢空的,然后是非空的,这准确吗?是的,需要完全相同的。