Tho*_*aux 5 lucene full-text-search elasticsearch
我正在索引一些启用了停用词的文本,我想使用“匹配短语”查询来搜索这些文本,但看起来停用词仍在考虑术语位置。
建筑指数:
PUT /fr_articles
{
"settings": {
"analysis": {
"analyzer": {
"stop": {
"type": "standard",
"stopwords" : ["the"]
}
}
}
},
"mappings": {
"test": {
"properties": {
"title": {
"type": "string",
"analyzer": "stop"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
添加文档:
POST /fr_articles/test/1
{
"title" : "Tom the king of Toulon!"
}
Run Code Online (Sandbox Code Playgroud)
搜索:
POST /fr_articles/_search
{
"fields": [
"title"
],
"explain": true,
"query": {
"match": {
"title": {
"query": "tom king",
"type" : "phrase"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
没有发现 ;-(
有办法解决吗?或者可能有多个跨度查询,但我希望这个词彼此靠近。
谢谢,
位置增量会导致此问题,是的。虽然停用词可能已消失且不可搜索,但它仍然不会将两个词推到彼此相邻的位置,因此查询"tom the king"既找不到"tom king"也找不到"such that tom will not be their king"。
通常,当您使用过滤器在分析中删除某些内容时,并不完全像它从未存在过一样。的目的StopFilter尤其是删除由无趣的术语导致的搜索命中。它不是改变文档或句子的结构。
您曾经可以禁用位置增量 on StopFilter,但从 Lucene 4.4 开始,该选项已被删除。
好吧,忘记那个 CharFilter 傻瓜。丑陋的黑客,不要这样做。
要在不使用位置增量的情况下进行查询,您需要在查询解析器中进行配置,而不是在分析中进行配置。这可以在elasticsearch来完成,具有查询字符串查询,以enable_position_increments设置为false。
就像是:
{
"query_string" : {
"default_field" : "title",
"query" : "\"tom king\""
"enable_position_increments" : false
}
}
Run Code Online (Sandbox Code Playgroud)
作为一个兴趣点,原始 Lucene 中的类似解决方案,通过设置QueryParser.setEnablePositionIncrements.
| 归档时间: |
|
| 查看次数: |
2129 次 |
| 最近记录: |