Javascript 词干搜索
我已经成功地为elasticsearch实现了词干分析,因此当我搜索“代码”时,我碰到了“代码”和“编码”等 当我试图在查询中使用“不得”字段时,问题就出现了。当我在“不得”字段中包含“代码”时,这很好,并且我仍然会得到预期的结果,但是当我搜索“代码”时,我不会得到任何结果,即使有文档中肯定有“代码”一词 我的质询如下:Javascript 词干搜索,javascript,node.js,
elasticsearch,Javascript,Node.js,
elasticsearch,我已经成功地为elasticsearch实现了词干分析,因此当我搜索“代码”时,我碰到了“代码”和“编码”等 当我试图在查询中使用“不得”字段时,问题就出现了。当我在“不得”字段中包含“代码”时,这很好,并且我仍然会得到预期的结果,但是当我搜索“代码”时,我不会得到任何结果,即使有文档中肯定有“代码”一词 我的质询如下: for(i = 0; i < exclude_words.length; i++) { must_not.push({term:{text:exclude_words
for(i = 0; i < exclude_words.length; i++)
{
must_not.push({term:{text:exclude_words[i].toLowerCase()}});
}
query = {
"filtered": {
"query": {
"dis_max": {
"queries": [
{"match": {"text": term}},
{"match": {"title": term}}
]
}
},
"filter": {
"bool": {
"must_not": must_not
}
}
}
}
文本字段具有以下映射:
"text": {
"type": "string",
"analyzer": "stopword_analyzer"
}
当我在“不得”字段中包含“代码”时,这很好,我仍然可以得到预期的结果
它不是关于must\u not
而是关于在must\u not
中使用的术语过滤器。术语
过滤器将获取您的搜索文本-“code”或“code”或其他内容,并使用精确的值进行过滤
但是,您正在使用的分析器正在更改被索引的术语。
例如,如果您想索引“编码”,实际上索引“编码”中将包含(作为反向索引中的术语)。请记住,term
实际上会搜索精确的值。因此,如果您搜索“代码”,它将不会被找到,因为您文档中的单个术语是“代码”
我建议尝试匹配
而不是中的术语
,因为这将在搜索时使用分析器。大概是这样的:
"filter": {
"bool": {
"must_not": [
{
"query": {
"match": {
"text": "codes"
}
}
},
{
"query": {
"match": {
"text": "coding"
}
}
}
]
}
}
当我在“不得”字段中包含“代码”时,这很好,我仍然可以得到预期的结果
它不是关于must\u not
而是关于在must\u not
中使用的术语过滤器。术语
过滤器将获取您的搜索文本-“code”或“code”或其他内容,并使用精确的值进行过滤
但是,您正在使用的分析器正在更改被索引的术语。
例如,如果您想索引“编码”,实际上索引“编码”中将包含(作为反向索引中的术语)。请记住,term
实际上会搜索精确的值。因此,如果您搜索“代码”,它将不会被找到,因为您文档中的单个术语是“代码”
我建议尝试匹配
而不是中的术语
,因为这将在搜索时使用分析器。大概是这样的:
"filter": {
"bool": {
"must_not": [
{
"query": {
"match": {
"text": "codes"
}
}
},
{
"query": {
"match": {
"text": "coding"
}
}
}
]
}
}
文本
字段的映射是什么?用它更新了问题,谢谢!文本
字段的映射是什么?用它更新了问题,谢谢!完美的作品很有魅力,非常感谢你,你帮了我很多工作!!!完美的作品很有魅力,非常感谢你,你帮了我很多工作!!!