elasticsearch ElasticSearch(嵌套)-忽略撇号
我对Elasticsearch很陌生。我一直在尝试实现一个相当基本的搜索功能,可以忽略撇号。我发现了这一点。对于实现,我使用了Nest库:elasticsearch ElasticSearch(嵌套)-忽略撇号,elasticsearch,nest,elasticsearch,Nest,我对Elasticsearch很陌生。我一直在尝试实现一个相当基本的搜索功能,可以忽略撇号。我发现了这一点。对于实现,我使用了Nest库: [ElasticsearchType] public class MappingTest { [Text(Analyzer = "english")] public string Title { get; set; } } 索引/搜索: var indexName = "testindex"; var connectionSettings =
[ElasticsearchType]
public class MappingTest
{
[Text(Analyzer = "english")]
public string Title { get; set; }
}
索引/搜索:
var indexName = "testindex";
var connectionSettings =
new ConnectionSettings(
new Uri("https://url.com"))
.DefaultIndex(indexName).EnableDebugMode();var client = new ElasticClient(connectionSettings);
if (client.IndexExists(Indices.All, descriptor => descriptor.Index(indexName)).Exists)
client.DeleteIndex(indexName);
var response = client.CreateIndex(indexName, i => new CreateIndexDescriptor(indexName)
.Mappings(ms => ms
.Map<MappingTest>(m => m.AutoMap())
).Settings(s => s
.Analysis(a => a
.Analyzers(aa => aa
.Custom("english", ca => ca
.Tokenizer("standard")
.Filters("english_possessive_stemmer", "lowercase")
)
)
.TokenFilters(
t => t.Stemmer("english_possessive_stemmer", d => d.Language("possessive_english")))
.TokenFilters(
t => t.Stemmer("english_stemmer", d => d.Language("english")))
.TokenFilters(
t => t.Stop("english_stop", d => d.StopWords("_english_")))
)
));
var obj = new MappingTest() { Title = "Example's" };
var indexResponse = client.Index(obj);
var term = "example";
QueryContainer commonQuery =
Query<MappingTest>.QueryString(qs => qs.Query(term).DefaultField(f => f.Title));
var searchResponse = client.Search<MappingTest>(s => s.Query(x => commonQuery));
var debug = searchResponse.DebugInformation;
var indexName=“testindex”;
var连接设置=
新连接设置(
新Uri(“https://url.com"))
.DefaultIndex(indexName).EnableDebugMode();var客户端=新的ElasticClient(连接设置);
if(client.indexists(Index.All,descriptor=>descriptor.Index(indexName)).Exists)
client.DeleteIndex(indexName);
var response=client.CreateIndex(indexName,i=>newcreateindexdescriptor(indexName)
.Mappings(ms=>ms
.Map(m=>m.AutoMap())
).Settings(s=>s
.分析(a=>a
.分析仪(aa=>aa
.Custom(“英语”,ca=>ca
.Tokenizer(“标准”)
.Filters(“英语所有格词干分析器”、“小写”)
)
)
.令牌过滤器(
t=>t.Stemmer(“英语所有格词干分析器”,d=>d.Language(“英语所有格词干分析器”))
.令牌过滤器(
t=>t.Stemmer(“english_Stemmer”,d=>d.Language(“english”))
.令牌过滤器(
t=>t.Stop(“english\u Stop”,d=>d.StopWords(“\u english\u”))
)
));
var obj=new MappingTest(){Title=“Example's”};
var indexResponse=客户指数(obj);
var term=“示例”;
QueryContainer commonQuery=
QueryString(qs=>qs.Query(term).DefaultField(f=>f.Title));
var searchResponse=client.Search(s=>s.Query(x=>commonQuery));
var debug=searchResponse.DebugInformation;
我尝试了一些方法,但每次都没有得到任何结果。我希望得到一些帮助。有几件事:
“english”
分析器,因为它内置于Elasticsearch中。如果要基于它,则需要按原样指定它。在这里的例子中,我认为您不想指定自己的,因为您的自定义分析器只使用英语所有格词干分析器
和小写
标记过滤器.TokenFilters()
将意味着只有最后一次调用获胜;调用通常在嵌套中执行赋值,所以您需要
.TokenFilters(t => t
.Stemmer("english_possessive_stemmer", d => d.Language("possessive_english"))
.Stemmer("english_stemmer", d => d.Language("english"))
.Stop("english_stop", d => d.StopWords("_english_")))
Title
上的Text
属性确定用于字段的分析器void Main()
{
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var defaultIndex = "default-index";
var connectionSettings = new ConnectionSettings(pool)
.DefaultIndex(defaultIndex)
.PrettyJson()
.EnableDebugMode(response =>
{
if (response.RequestBodyInBytes != null)
{
Console.WriteLine(
$"{response.HttpMethod} {response.Uri} \n" +
$"{Encoding.UTF8.GetString(response.RequestBodyInBytes)}");
}
else
{
Console.WriteLine($"{response.HttpMethod} {response.Uri}");
}
Console.WriteLine();
if (response.ResponseBodyInBytes != null)
{
Console.WriteLine($"Status: {response.HttpStatusCode}\n" +
$"{Encoding.UTF8.GetString(response.ResponseBodyInBytes)}\n" +
$"{new string('-', 30)}\n");
}
else
{
Console.WriteLine($"Status: {response.HttpStatusCode}\n" +
$"{new string('-', 30)}\n");
}
});
var client = new ElasticClient(connectionSettings);
if (client.IndexExists(defaultIndex).Exists)
client.DeleteIndex(defaultIndex);
client.CreateIndex(defaultIndex, i => i
.Mappings(ms => ms
.Map<MappingTest>(m => m
.AutoMap()
)
)
);
client.Analyze(a => a
.Index(defaultIndex)
.Field<MappingTest>(f => f.Title)
.Text("Example's")
);
}
[ElasticsearchType]
public class MappingTest
{
[Text(Analyzer = "english")]
public string Title { get; set; }
}
如何实现这一点?
{
"tokens" : [
{
"token" : "exampl",
"start_offset" : 0,
"end_offset" : 9,
"type" : "<ALPHANUM>",
"position" : 0
}
]
}