在ElasticSearch中使用分析器进行部分搜索 [英] Partial Search using Analyzer in ElasticSearch

查看:128
本文介绍了在ElasticSearch中使用分析器进行部分搜索的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用弹性搜索来构建URL的索引。



我将一个URL提取为3个部分,即域,路径和查询 。



例如: testing.com/index.html?user=who&pw=no 将被分开进入

  domain = testing.com 
path = index.html
query = user = who& pw = no

当我想要在我的索引中部分搜索域时出现问题,例如user = who 或ing.com。



我在搜索时是否可以使用Analyzer,即使在索引时也没有使用Analyzer?



如何根据分析仪进行部分搜索?



非常感谢。

解决方案

2方法:



1。通配符搜索 - 轻松缓慢



 查询:{
query_string:{
查询:* ing.com,
default_field:domain
}
}



2。使用nGram分类器 - 更难,但更快



索引设置

 settings:{
analysis:{
analyzer:{
my_ngram_analyzer:{
tokenizer:my_ngram_tokenizer
}
},
tokenizer:{
my_ngram_tokenizer:{
type:nGram,
min_gram:1 ,
max_gram:50
}
}
}
}

映射

 属性:{
domain:{
type:string,
index_analyzer:my_ngram_analyzer
},
path:{
type:string,
index_analyzer:my_ngram_analyzer
},
query:{
type:string,
index_analyzer:my_ngram_analyzer

}

查询

 查询:{
match:{
domain:ing.com
}
}


I am using elasticsearch to build the index of URLs.

I extracted one URL into 3 parts which is "domain", "path", and "query".

For example: testing.com/index.html?user=who&pw=no will be separated into

domain = testing.com
path = index.html
query = user=who&pw=no

There is problems when I wanted to partial search domain in my index such as "user=who" or "ing.com".

Is it possible to use "Analyzer" when I search even I didn't use "Analyzer" when indexing?

How can I do partial search based on the analyzer ?

Thank you very much.

解决方案

2 approaches:

1. Wildcard search - easy and slow

"query": {
    "query_string": {
        "query": "*ing.com",
        "default_field": "domain"
    }
}

2. Use an nGram tokenizer - harder but faster

Index Settings

"settings" : {
    "analysis" : {
        "analyzer" : {
            "my_ngram_analyzer" : {
                "tokenizer" : "my_ngram_tokenizer"
            }
        },
        "tokenizer" : {
            "my_ngram_tokenizer" : {
                "type" : "nGram",
                "min_gram" : "1",
                "max_gram" : "50"
            }
        }
    }
}

Mapping

"properties": {
    "domain": {
        "type": "string",
        "index_analyzer": "my_ngram_analyzer"
    },
    "path": {
        "type": "string",
        "index_analyzer": "my_ngram_analyzer"
    },
    "query": {
        "type": "string",
        "index_analyzer": "my_ngram_analyzer"
    }
}

Querying

"query": {
    "match": {
        "domain": "ing.com"
    }
}

这篇关于在ElasticSearch中使用分析器进行部分搜索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆