我还没有使用Elasticsearch所以请原谅我的错误描述。我想知道是否可以配置Elasticsearch来执行以下操作 - 我在MongoDB中遇到了一些问题,因为全文搜索功能似乎有点限制。
这是我的问题 - 当我搜索
Korea
一词时,我没有 希望它与文档中的North Korea
或N. Korea
匹配。
假设搜索Korea
约为South Korea
。这明显不同于同义词,因为它恰恰相反。在South Korea
中搜索短语是不可能的,因为它不适用于我的问题。这可能吗?
我会接受MongoDB或Elasticsearch的答案。
答案 0 :(得分:2)
如果你使用像这样的查询怎么办:
{
"query": {
"bool": {
"should": [
{
"match": {
"some_field": "korea"
}
},
{
"query_string": {
"query": "-some_field:(\"north korea\")"
}
},
{
"query_string": {
"query": "-some_field:(\"n. korea\")"
}
}
]
}
}
}
它的作用是这样的:
基本上,如果匹配" korea",如果它不匹配"朝鲜"如果它不匹配" n。韩国"
例如,对于像这样的文件
POST /my_index/test/1
{
"text": "North Korea"
}
POST /my_index/test/2
{
"text": "Korea"
}
POST /my_index/test/3
{
"text": "N. Korea"
}
POST /my_index/test/4
{
"text": "South Korea"
}
上面的查询将返回:
"hits": [
{
"_index": "korea",
"_type": "test",
"_id": "2",
"_score": 1.4471208,
"_source": {
"text": "Korea"
}
},
{
"_index": "korea",
"_type": "test",
"_id": "4",
"_score": 1.4227209,
"_source": {
"text": "South Korea"
}
},
{
"_index": "korea",
"_type": "test",
"_id": "1",
"_score": 0.48779577,
"_source": {
"text": "North Korea"
}
},
{
"_index": "korea",
"_type": "test",
"_id": "3",
"_score": 0.48779577,
"_source": {
"text": "N. Korea"
}
}
]
最高得分是针对不是朝鲜的文件。