如果这是我的问题,我事先道歉在弹性搜索环境中是没有道理的,但是我已经到处搜索并且没有找到合适的解决方案/结论。
让我们假设我的索引只有一个description
类型的属性text
。
让我们说我想搜索brown dog
。我对以下结果感兴趣:
the brown dog
the dog is brown
但是我想舍弃较大值的结果,例如:
the brown dog and the lazy cat
the brown dog jumps over the fence
总而言之,我只对与我的搜索文字尽可能接近的结果感兴趣。
有没有一种方法或类型的查询可以让我完成此任务?
提前谢谢!如果我的问题不清楚,请随时告诉我。
答案 0 :(得分:0)
嗯...由于您想要的完全无法做到,因此没有特定的处理方法。您可以做的最接近的事情就是处理查询,并做出很好的查询,以在搜索时获得高分。
阅读此书,希望对您有所了解。随时问我是否有麻烦!
答案 1 :(得分:0)
您的问题是关于删除搜索字段中包含不属于查询的“多”标记的匹配项。
您可能需要设置查询阈值(min-score),因为doc.length(aka fieldLen)是BM25和TF-IDF计算的一部分 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html#request-body-search-min-score
确定可以使用script-query来过滤doc.length。
答案 2 :(得分:0)
如果您希望完全匹配令牌(忽略停用词),可以尝试以下操作。 我正在使用停用词过滤器删除停用词(the,is等)和token_count数据类型以存储剩余令牌的计数。可以像以下文档一样查询文档:-“ search_text”:“棕色狗”,令牌长度为2。
映射:
PUT testindex6
{
"settings": {
"analysis": {
"filter": {
"english_stop": {
"type": "stop",
"stopwords": "_english_"
}
},
"analyzer": {
"stop_analyzer": {
"tokenizer": "lowercase",
"filter": [
"english_stop"
]
}
}
}
},
"mappings": {
"properties": {
"search_text": {
"type": "text",
"analyzer": "stop_analyzer",
"fields": {
"length": {
"type": "token_count",
"enable_position_increments":false,
"analyzer": "stop_analyzer"
}
}
}
}
}
}
数据:
[
{
"_index" : "testindex6",
"_type" : "_doc",
"_id" : "QQ_ADm0BnGA1T2ysD5Hr",
"_score" : 1.0,
"_source" : {
"search_text" : "the dog is brown"
}
},
{
"_index" : "testindex6",
"_type" : "_doc",
"_id" : "Qg_ADm0BnGA1T2ys4JH7",
"_score" : 1.0,
"_source" : {
"search_text" : "the brown dog"
}
},
{
"_index" : "testindex6",
"_type" : "_doc",
"_id" : "Qw_BDm0BnGA1T2ysUJFH",
"_score" : 1.0,
"_source" : {
"search_text" : "the brown dog and the lazy cat"
}
}
]
查询:
GET testindex6/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"search_text": "brown dog"
}
},
{
"term": {
"search_text.length": {
"value": 2
}
}
}
]
}
}
}
结果:
[
{
"_index" : "testindex6",
"_type" : "_doc",
"_id" : "QQ_ADm0BnGA1T2ysD5Hr",
"_score" : 1.2974876,
"_source" : {
"search_text" : "the dog is brown"
}
},
{
"_index" : "testindex6",
"_type" : "_doc",
"_id" : "Qg_ADm0BnGA1T2ys4JH7",
"_score" : 1.2974876,
"_source" : {
"search_text" : "the brown dog"
}
}
]