我正在使用Elasticsearch 2.2.0,但这也发生在1.x版本中。
其中一个文字字段包含google.com一词。当我尝试搜索谷歌时,ElasticSearch不会返回任何内容。但是,如果我搜索google.com,它会返回包含它的文档。
我的查询很简单,如下所示:
query: {
filtered: {
query: {
simple_query_string: {
query: "google"
}
}
}
}
当我搜索谷歌时,我该怎么做才能使弹性搜索返回文档?
答案 0 :(得分:0)
我使用“通配符”查询
进行此类查询https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html
{
"query": {
"bool": {
"must": {
"wildcard": {
"fieldname": "google*" // replace the fieldname her
}
}
}
}
}
答案 1 :(得分:0)
我建议您阅读有关_all
字段的the documentation,因为simple_query_string
在未指定任何字段时会使用此字段,这是您的情况。
_all
默认使用standard
分析器编入索引,这意味着google.com
不会在.
拆分,而是会被归类为google.com
。这意味着搜索google.com
会在您的索引中查找此字词,而在您的文字中搜索google
。
在Elasticsearch中搜索不仅涉及查询,还涉及索引数据的方式。它可能不像使用LIKE 的 SQL查询那么简单,但与此同时,ES在 insert 时提供了比SQL更多的权力。
根据您对simple_query
的要求,您有多种选择可供选择:
_all
字段的分析器:{
"settings": {
"analysis": {
"analyzer": {
"letter": {
"type": "custom",
"tokenizer": "letter",
"filter": [
"lowercase"
]
}
}
}
},
"mappings": {
"test": {
"_all": {
"analyzer": "letter"
}
和查询:
"query": {
"simple_query_string": {
"query": "google"
}
}
field
的分析器并**使用query_string_query
中的该字段:{
"settings": {
"analysis": {
"analyzer": {
"letter": {
"type": "custom",
"tokenizer": "letter",
"filter": [
"lowercase"
]
}
}
}
},
"mappings": {
"test": {
"properties": {
"text": {
"type": "string",
"analyzer": "letter"
}
}
查询:
"query": {
"simple_query_string": {
"query": "google",
"fields": ["text"]
}
}