0

我正在尝试查找索引中的所有关键字。这是为了在键入时对单词进行自动完成。

但是您将如何设置该过滤器?还是我需要将其与索引映射?

注意:我不想在文件完整结果名称上自动完成(所以如果我存储)结果that big brown fox is dead可能是bigbrown和)foxdead

例如,我fox索引的单词越多,它的分数就越高

当您键入时,我对整个单词有一个完整的自动完成功能(所以这不是我要找的):

that big brown fox is dead当我键入时,这会给我fo。而不仅仅是fox

  var c = new ElasticClient();
  var results = c.Search<dm_document>(s => s
      .From(from)
      .Size(size)
      .Index("testindex")
      .Query(q => q.Term(d => d.object_name.Suffix("autocomplete"), search))
  );
  return results.Documents.Select(d => new { d.object_name, d.r_object_id }).ToList();

使用以下索引设置

  var createResult = client.CreateIndex("testindex", index => index
      .Analysis(analysis => analysis
          .Analyzers(a => a
              .Add(
                  "autocomplete",
                  new Nest.CustomAnalyzer() {
                    Tokenizer = "edgeNGram",
                    Filter = new string[] { "lowercase" }
                  }
              )
          )
          .Tokenizers(t => t
              .Add(
                  "edgeNGram",
                  new Nest.EdgeNGramTokenizer() {
                    MinGram = 1,
                    MaxGram = 20
                  }
              )
          )
      )
      .AddMapping<dm_document>(tmd => tmd
          .Properties(props => props
              .MultiField(p => p
                  .Name(t => t.object_name)
                  .Fields(tf => tf
                      .String(s => s
                          .Name(t => t.object_name)
                          .Index(Nest.FieldIndexOption.NotAnalyzed)
                      )
                      .String(s => s
                          .Name(t => t.object_name.Suffix("autocomplete"))
                          .Index(Nest.FieldIndexOption.Analyzed)
                          .IndexAnalyzer("autocomplete")
                      )
                      .String(s => s
                          .Name(t => t.title)
                          .Index(Nest.FieldIndexOption.NotAnalyzed)
                      )
                      .String(s => s
                          .Name(t => t.title.Suffix("autocomplete"))
                          .Index(Nest.FieldIndexOption.Analyzed)
                          .IndexAnalyzer("autocomplete")
                      )
                      .String(s => s
                          .Name(t => t.text)
                          .Index(Nest.FieldIndexOption.Analyzed)
                          .IndexAnalyzer("snowball")
                      )
                      .String(s => s
                          .IndexName("tag")
                          .Name("keywords_test")
                          .IndexAnalyzer("keywords")
                      )
                  )
              )
          )
      )
  );

但这会导致对象的全名,我只想要关键字

更新:找到了如何获得条款,不确定这个结果是否是我需要的,但它已经给了我条款

POST _search
{
    "query" : { "query_string" : {"query" : "*"} },
    "facets": {
       "tags": {
          "terms": {
             "field": "title"
          }
       }
    }
}

现在我需要弄清楚如何搜索这些术语

4

0 回答 0