我确实读过这个post,但我并不完全明白如何应用它。
我对我的索引进行了分析,我想知道我是否可以搜索没有屈折形式的短语。
es.indices.create(index='bhar',body = {
"settings":{
"analysis":{
"analyzer":{
"my_stop_analyzer":{
"type":"custom",
"tokenizer":"standard",
"filter": ["english_possessive_stemmer","lowercase","english_stop","english_stemmer"]
}
},"filter":{
"english_stop":{
"type":"stop",
"stopwords":"_english_"
},
"english_stemmer":{
"type":"stemmer",
"name":"english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
}}}},
"mappings":{
"my_type":{
"properties":{
"test": {
"type":"text",
"analyzer" : "my_stop_analyzer"
}
}
}
}
})
`
一条记录的数据是"选择高耸"。 当我搜索" pick tower"时,它仍然给我一个match_phrase的结果,我写的是这样的:
scroll = elasticsearch.helpers.scan(es, query={
"query":{
"match_phrase":{
"test":{
"query":"pick rule"
}
}
}
},index='bhar', scroll='100s')`
有什么方法可以得到这句话的完全匹配?谢谢
答案 0 :(得分:1)
您的分析器正在更改已编制索引的条款,并且无法保留原始文本。 我的建议是稍微改变你的映射:
"test": {
"type": "text",
"analyzer": "my_stop_analyzer",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
并在您的查询中介绍"完全匹配"选项:
"match_phrase": {
"test.keyword": "picks towering"
}
或
"query": {
"bool": {
"should": [
{
"match_phrase": {
"test.keyword": "picks towering"
}
},
{
"match_phrase": {
"test": "picks towering"
}
}
]
}
}
上面的第二种查询意味着不会干扰您已经拥有的任何其他查询。