Elasticsearch获取关键字

时间:2015-07-22 11:14:30

标签: elasticsearch elasticsearch-net

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

但你会如何设置该过滤器?或者我是否需要将其与索引进行映射?

注意:我不想对文件的完整结果名称进行自动填充(因此,如果我存储that big brown fox is dead),结果可能是bigbrownfoxdead

以及更多例如我将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"
          }
       }
    }
}

现在我需要弄清楚如何搜索这些条款

0 个答案:

没有答案