gpt4 book ai didi

php - 从查询过滤器开始,使用Elastica进行Elasticsearch

转载 作者:行者123 更新时间:2023-12-02 22:43:59 28 4
gpt4 key购买 nike

我有一个适用于Web应用程序的Elasticsearch搜索实现,但是我停留在最后一个细节上。我希望能够按字母顺序过滤某些字段。因此,如果我查询“d”,则应带回该字段以“d”开头的所有内容。目前,这是我所拥有的:

$elasticaQueryString = new Elastica_Query_QueryString();
$elasticaQueryString->setDefaultField('Name');
$elasticaQueryString->setQuery('d'.'*');

它适用于只有一项作品(即“Dan”)的字段。但是,如果有多个单词,则返回每个关键字的结果。即“Dan Ryan”,“Ryan Dan”。我也尝试过通配符和前缀查询,但它们给出的结果相似。

我是否需要创建一个自定义分析器,还是有其他解决方法?

最佳答案

我将首先在映射级别解决此问题。关键字标记器将使整个字段成为单个标记,然后添加小写过滤器将使所有内容变为小写...使字段不区分大小写:

"analysis":{
"analyzer":{
"analyzer_firstletter":{
"tokenizer":"keyword",
"filter":"lowercase"
}
}

插入一些数据后,索引将保留以下内容:
$ curl -XGET localhost:9200/test2/tweet/_search -d '{
"query": {
"match_all" :{}
}
}' | grep title

"title" : "river dog"
"title" : "data"
"title" : "drive"
"title" : "drunk"
"title" : "dzone"

注意条目“river dog”,这是您要避免匹配的内容。现在,如果我们使用 match_phrase_prefix查询,则只匹配以'd'开头的那些:
 $ curl -XGET localhost:9200/test2/tweet/_search -d '{
"query": {
"match_phrase_prefix": {
"title": {
"query": "d",
"max_expansions": 5
}
}
}
}' | grep title

"title" : "drive"
"title" : "drunk"
"title" : "dzone"
"title" : "data"

这不是Elastica特有的,但是应该很容易转换为适当的命令。重要的部分是 keyword + lowercase分析器,然后使用 match_phrase_prefix查询。

附带说明,通配符非常慢,最好在可能的情况下避免使用:)

关于php - 从查询过滤器开始,使用Elastica进行Elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14625491/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com