弹性搜索中带有其他条件的完成建议器

时间:2018-10-22 15:48:09

标签: elasticsearch kibana elastic-stack elasticsearch-5 search-suggestion

我有一个索引,可以返回不同语言的作业。

我需要按照与单一语言对应的单个文本搜索相似的工作。假设我们已将1设置为English的LanguageId。我想搜索与帐户匹配的职位。因此,如果我在下面的查询中编写代码,它将使用所有不同的语言来获取作业。因此,基本上“必须” 查询不会产生任何影响。

GET jobs/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "languageid": "1"
          }
        }
      ]
    }
  },
  "suggest": {
    "suggestions": {
      "text": "acce",
      "completion": {
        "field": "jobs.suggest",
        "size": 30
      }
    }
  }
}

我的映射如下所示

   "mappings": {
"jobs": {
        "properties": {
          "@timestamp": {
            "type": "date"
          },
          "@version": {
            "type": "text"
          },
          "industytype": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "jobs": {
            "properties": {
              "suggest": {
                "type": "completion",
                "analyzer": "simple",
                "preserve_separators": true,
                "preserve_position_increments": true,
                "max_input_length": 50
              }
            }
          },
          "language": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "type": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "updateddate": {
            "type": "date"
          }
        }
      }
    }
}

1 个答案:

答案 0 :(得分:1)

无法在查询时过滤出建议,因为completion建议者使用FST-在索引时建立的特殊内存数据结构:

  

通过在索引中加载完成值,然后构建FST,可以在内存中构建Lucene中的Suggester。这可能是一个缓慢的资源密集型过程。并且,一旦索引更改,就需要重建FST。 “实时搜索”是Elasticsearch的口头禅。返回过期的建议,或者每当索引更改时都要求完全重建是不可接受的。 我们现在不再在搜索时构建FST,而是在索引时构建每个细分的FST。

因此,您所能做的就是为您的建议者添加context。上下文也在索引时间与completion字段一起填充,因此可以在suggest查询的查询时间使用。另外,此article可能对您有用。