另外,我有部分搜索工作,我可以搜索所有字段。但是我无法在映射所有字段的搜索上使用部分匹配。
当我使用部分匹配时,这会返回我的名字:
GET /_search?pretty=true
{
"query": {
"match": {
"FullName": "andon"
}
}
}
此搜索在所有字段上运行,但不进行部分匹配(0次点击):
GET /_search?pretty=true
{
"query": {
"match": {
"_all": "andon"
}
}
}
我需要做些什么才能将部分匹配与所有字段上的搜索相结合。类型?我有很多字段和类型,所以我希望避免必须手动指定它们。
如果它有任何区别,我将从连接到SQL的River插入我的数据。
编辑:我现在在我的映射中有_all字段。它似乎没有任何区别。
PUT /contact/
{
"settings" : {
"index" : {
"analysis" : {
"analyzer" : {
"my_ngram_analyzer" : {
"tokenizer" : "my_ngram_tokenizer"
}
},
"tokenizer" : {
"my_ngram_tokenizer" : {
"type" : "nGram",
"min_gram" : "1",
"max_gram" : "10"
}
}
}
}
},
"mappings": {
"_default_": {
"_all" : {"enabled" : true},
"properties" : {
"Description":{"type":"string","store":"yes", "index_analyzer": "my_ngram_analyzer"},
"OfficePhone":{"type":"string","store":"yes"},
"Email":{"type":"string","store":"yes", "index_analyzer": "my_ngram_analyzer"},
"FullName":{"type":"string","store":"yes", "index_analyzer": "my_ngram_analyzer"},
"ReportsTo":{"type":"string","store":"yes"},
"Department":{"type":"string","store":"yes", "index_analyzer": "my_ngram_analyzer"},
"Title":{"type":"string","store":"yes", "index_analyzer": "my_ngram_analyzer"}
}
}
}
}
答案 0 :(得分:24)
_all
-field通过获取所有字段的文本,通过分析器传递_all
(standard
除非被覆盖),然后索引生成的术语。
它不取分析器为其他字段制作的任何条款,并将它们全部推送到同一个字段中。
因此,您必须覆盖_all
- 字段才能使用自定义分析器。
但是!我不认为你真的想这样做。您将获得更大的索引。 _all
有时很方便,但通常最好控制在搜索时搜索哪些字段。
因此,您可能希望使用multi_match
来指定字段,而不是在match
上执行_all
。如果您使用1.0,也可以考虑copy_to
。
答案 1 :(得分:1)
我尝试使用通配符(%2A)进行搜索,并且能够进行部分搜索
ex => Q =咀嚼%2A和;大小= 100