我正在使用elasticsearch构建网址索引。
我将一个网址提取为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”?
如何根据分析仪进行部分搜索?
非常感谢。
答案 0 :(得分:5)
2种方法:
"query": {
"query_string": {
"query": "*ing.com",
"default_field": "domain"
}
}
索引设置
"settings" : {
"analysis" : {
"analyzer" : {
"my_ngram_analyzer" : {
"tokenizer" : "my_ngram_tokenizer"
}
},
"tokenizer" : {
"my_ngram_tokenizer" : {
"type" : "nGram",
"min_gram" : "1",
"max_gram" : "50"
}
}
}
}
<强>映射强>
"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"
}
}
<强>查询强>
"query": {
"match": {
"domain": "ing.com"
}
}
答案 1 :(得分:-1)
在索引时,带有查询字符串的技巧是将"user=who&pw=no"
分割为字符["user=who&pw=no", "user=who", "pw=no"]
。这使您可以轻松查询"user=who"
等查询。您可以使用pattern_capture标记过滤器执行此操作,但也可以有更好的方法来执行此操作。
您还可以使用path_hierarchy tokenizer更方便地搜索主机名和路径,例如"/some/path/somewhere"
变为["/some/path/somewhere", "/some/path/", "/some"]
。您还可以使用设置reverse: true
和delimiter: "."
使用path_hierarchy hierarcy tokenizer索引主机名。您可能还想使用一些停用词过滤器来排除顶级域名。