elasticsearch elasticsearch嵌套停止字筛选器不工作,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch elasticsearch嵌套停止字筛选器不工作,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch elasticsearch嵌套停止字筛选器不工作

elasticsearch elasticsearch嵌套停止字筛选器不工作,elasticsearch,nest,elasticsearch,Nest,我已经厌倦了实现elasticsearch NEST客户端和索引文档和SQL数据,并且能够完美地搜索这些。但我无法在这些记录上使用stopwords。下面是代码。请注意,我把“abc”作为停止词 公共索引设置GetIndexSettings() { var stopTokenFilter = new StopTokenFilter(); string stopwordsfilePath = Convert.ToString(ConfigurationManage

我已经厌倦了实现elasticsearch NEST客户端和索引文档和SQL数据,并且能够完美地搜索这些。但我无法在这些记录上使用stopwords。下面是代码。请注意,我把“abc”作为停止词

公共索引设置GetIndexSettings() {

        var stopTokenFilter = new StopTokenFilter();

        string stopwordsfilePath = Convert.ToString(ConfigurationManager.AppSettings["Stopwords"]);

        string[] stopwordsLines = System.IO.File.ReadAllLines(stopwordsfilePath);

        List<string> words = new List<string>();

        foreach (string line in stopwordsLines)
        {
            words.Add(line);
        }

        stopTokenFilter.Stopwords = words;


        var settings = new IndexSettings { NumberOfReplicas = 0, NumberOfShards = 5 };

        settings.Settings.Add("merge.policy.merge_factor", "10");
        settings.Settings.Add("search.slowlog.threshold.fetch.warn", "1s");

        settings.Analysis.Analyzers.Add("xyz", new StandardAnalyzer { StopWords = words });

        settings.Analysis.Tokenizers.Add("keyword", new KeywordTokenizer());
        settings.Analysis.Tokenizers.Add("standard", new StandardTokenizer());

        settings.Analysis.TokenFilters.Add("standard", new StandardTokenFilter());
        settings.Analysis.TokenFilters.Add("lowercase", new LowercaseTokenFilter());
        settings.Analysis.TokenFilters.Add("stop", stopTokenFilter);
        settings.Analysis.TokenFilters.Add("asciifolding", new AsciiFoldingTokenFilter());
        settings.Analysis.TokenFilters.Add("word_delimiter", new WordDelimiterTokenFilter());

        return settings;
    }

     public void CreateDocumentIndex(string indexName = null)
    {

        IndexSettings settings = GetIndexSettings();

        if (!this.client.IndexExists(indexName).Exists)
        {
            this.client.CreateIndex(indexName, c => c
                .InitializeUsing(settings)
                .AddMapping<Document>
                (m => m.Properties(ps => ps.Attachment
                                        (a => a.Name(o => o.Documents)
                                               .TitleField(t => t.Name(x => x.Name)
                                                                .TermVector(TermVectorOption.WithPositionsOffsets))))));
        }
        var r = this.client.GetIndexSettings(i => i.Index(indexName));
    }
var stoptokefilter=new stoptokefilter();
字符串stopwordsfilePath=Convert.ToString(ConfigurationManager.AppSettings[“Stopwords”]);
字符串[]stopwordsLines=System.IO.File.ReadAllLines(stopwordsfilePath);
列表单词=新列表();
foreach(stopwordsLines中的字符串行)
{
添加(行);
}
stopTokenFilter.Stopwords=words;
var设置=新索引设置{NumberOfReplicas=0,NumberOfShards=5};
settings.settings.Add(“merge.policy.merge_factor”,“10”);
settings.settings.Add(“search.slowlog.threshold.fetch.warn”,“1s”);
settings.Analysis.Analyzers.Add(“xyz”,新标准分析器{StopWords=words});
settings.Analysis.Tokenizers.Add(“关键字”,new KeywordTokenizer());
settings.Analysis.Tokenizers.Add(“标准”,新的StandardTokenizer());
settings.Analysis.TokenFilters.Add(“标准”,新的StandardTokenFilter());
settings.Analysis.TokenFilters.Add(“lowercase”,新的LowercaseTokenFilter());
settings.Analysis.TokenFilters.Add(“停止”,stoptokefilter);
settings.Analysis.TokenFilters.Add(“asciifolding”,new-AsciiFoldingTokenFilter());
settings.Analysis.TokenFilters.Add(“word_delimiter”,newworddelimiterTokenFilter());
返回设置;
}
public void CreateDocumentIndex(字符串indexName=null)
{
IndexSettings=GetIndexSettings();
如果(!this.client.indexists(indexName).Exists)
{
this.client.CreateIndex(indexName,c=>c
.初始化(设置)
.AddMapping
(m=>m.Properties(ps=>ps.Attachment
(a=>a.Name(o=>o.Documents)
.TitleField(t=>t.Name(x=>x.Name)
.TermVector(TermVectorOption.withPositionsofSets()()())));
}
var r=this.client.GetIndexSettings(i=>i.Index(indexName));
}
索引数据

        var documents = GetDocuments();
        documents.ForEach((document) =>
        {
            indexRepository.IndexData<Document>(document, DOCindexName, DOCtypeName);
        });

    public bool IndexData<T>(T data, string indexName = null, string mappingType = null)
    where T : class, new()
    {
        if (client == null)
        {
            throw new ArgumentNullException("data");
        }

        var result = this.client.Index<T>(data, c => c.Index(indexName).Type(mappingType));

        return result.IsValid;
    }
var documents=GetDocuments();
documents.ForEach((文档)=>
{
indexRepository.IndexData(文档、DOCindexName、DOCtypeName);
});
public bool IndexData(T数据,字符串indexName=null,字符串mappingType=null)
其中T:class,new()
{
if(客户端==null)
{
抛出新的异常(“数据”);
}
var result=this.client.Index(数据,c=>c.Index(indexName).Type(mappingType));
返回result.IsValid;
}
在我的一份文件中,我只写了一行“abc”,我不希望返回,因为“abc”在我的停止字列表中。但在搜索文档时,它也会返回上面的文档。下面是搜索查询

    public IEnumerable<dynamic> GetAll(string queryTerm)
    {
        var queryResult = this.client.Search<dynamic>(d => d
            .Analyzer("xyz")
            .AllIndices()
            .AllTypes()
            .QueryString(queryTerm)).Documents;

        return queryResult;
    }
public IEnumerable GetAll(字符串查询项)
{
var queryResult=this.client.Search(d=>d
.分析器(“xyz”)
.AllIndices()
.AllTypes()
.QueryString(queryTerm))。文档;
返回查询结果;
}
请告诉我哪里出了问题