You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ElasticSearch含斜杠的DOI字段需用何种分词器实现精确匹配?

问题:DOI字段实现精确匹配的Elasticsearch配置方案

问题背景

我正在构建一个支持多字段筛选的搜索功能,其中DOI字段需要返回精确匹配的结果。

数据模型

使用的实体类代码如下:

public class PaperElasticSearchModel
{
    public string Title { get; set; }
    public string Abstract { get; set; }
    public string Keywords { get; set; }
    public string DOI { get; set; }
    public int Year { get; set; }
    public string[] Author { get; set; }
}

DOI格式示例:10.1523/JNEUROSCI.18-04-01622.1998

当前索引配置

现有Elasticsearch索引创建代码:

Client.Indices.Create(index, pub => pub
.Settings(s => s
 .Analysis(descriptor => descriptor
     .Analyzers(analyzer => analyzer
         .Custom("custom_analyzer", ca => ca
             .Filters("lowercase", "stop", "classic", "word_delimiter")
             )
         )
         
    .TokenFilters(bases => bases
         .EdgeNGram("custom_analyzer", td => td
         .MinGram(2)
         .MaxGram(25))
         )
    )
 .Setting(UpdatableIndexSettings.MaxNGramDiff, 23)
 )
.Map<PubScreenSearch>(m => m
 .AutoMap()
 .Properties(p => p
     .Text(t => t
         .Name(f => f.Author)
         .Analyzer("custom_analyzer"))
     .Text(t => t
         .Name(f => f.Keywords)
         .Analyzer("custom_analyzer"))
     .Text(t => t
         .Name(f => f.Title)
         .Analyzer("custom_analyzer"))
     .Keyword(t => t
         .Name(f => f.DOI)
     )
     
 )));

失败的尝试

曾尝试用Pattern分词器配置DOI字段,但未实现精确匹配:

.Text(t => t    
   .Name(f => f.DOI)
   .Analyzer(new PatternAnalyzer().Pattern = @"(.(\/|\?)*)\w+")

可行解决方案

无需修改分词器配置,在查询时指定DOI字段的keyword子字段执行Term查询,即可实现精确匹配:

filterQuery.Add(fq => fq
            .Bool(f => f
                .Must(boolSHould => boolSHould
                    .Term(t => t
                        .Field(feild => feild.DOI.Suffix("keyword"))
                        .Value(value))
                        ))
            
        );

内容的提问来源于stack exchange,提问作者Suji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:00:55