我来自MySql背景。所以我不太了解弹性搜索及其工作。
这是我的要求
将在所有列上显示带有排序选项的结果记录表。将有过滤选项,用户将从中选择多个列的多个值(例如,City应来自City1,City2,City3和Category应来自Cat2,Cat22,Cat6)。还将有搜索栏,用户将在其中输入一些文本,全文搜索将应用于某些字段(即城市,区域等)。
此图片将提供更好的理解。
我面临的问题是全文搜索。我尝试了一些映射,但每次我都要在全文搜索或术语搜索上妥协。所以我认为没有任何方法可以在同一领域同时应用这两种搜索。但正如我所说,我不太了解弹性搜索。因此,如果任何人有解决方案,将不胜感激。
以下是我目前应用的内容,它使排序和术语搜索启用,但全文搜索无法正常工作。
{
"mappings":{
"my_type":{
"properties":{
"city":{
"type":"string",
"index":"not_analyzed"
},
"category":{
"type":"string",
"index":"not_analyzed"
},
"area":{
"type":"string",
"index":"not_analyzed"
},
"zip":{
"type":"string",
"index":"not_analyzed"
},
"state":{
"type":"string",
"index":"not_analyzed"
}
}
}
}
}
答案 0 :(得分:0)
您可以使用多个字段更新映射,其中两个映射一个用于全文,另一个用于术语搜索。这是城市的示例映射。
{
"city": {
"type": "string",
"index": "not_analyzed",
"fields": {
"fulltext": {
"type": "string"
}
}
}
}
默认映射用于术语搜索,因此当需要术语搜索时,您可以在“城市”字段中进行简单查询。但是,您需要全文搜索,必须在“city.fulltext”上执行查询。希望这会有所帮助。
答案 1 :(得分:0)
全文搜索不适用于not_analyzed
字段,排序不适用于analyzed
字段。
您需要使用multi-fields。
为不同目的以不同方式索引相同字段通常很有用。这是多领域的目的。例如,字符串字段可以映射为全文搜索的文本字段,也可以映射为排序或聚合的关键字字段:
例如:
{
"mappings": {
"my_type": {
"properties": {
"city": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
} ...
}
}
}
}
使用点符号按city.raw
排序:
{
"query": {
"match": {
"city": "york"
}
},
"sort": {
"city.raw": "asc"
}
}