我正在使用ElasticSearch索引文档.
我的映射是:
"mongodocid": {
"boost": 1.0,
"store": "yes",
"type": "string"
},
"fulltext": {
"boost": 1.0,
"index": "analyzed",
"store": "yes",
"type": "string",
"term_vector": "with_positions_offsets"
}
Run Code Online (Sandbox Code Playgroud)
要突出显示完整的全文,我将其设置number_of_framgments为0.
如果我执行以下类似Lucene的字符串查询:
{
"highlight": {
"pre_tags": "<b>",
"fields": {
"fulltext": {
"number_of_fragments": 0
}
},
"post_tags": "</b>"
},
"query": {
"query_string": {
"query": "fulltext:test"
}
},
"size": 100
}
Run Code Online (Sandbox Code Playgroud)
对于结果集中的某些文档,突出显示的全文的长度小于全文本身.由于我设置number_of_fragments为0和pre_tags/ post_tags被添加,这不应该发生.
现在出现了奇怪的行为:如果我只通过这样做来搜索其中一个失败的元素:
{
"highlight": {
"pre_tags": "<b>",
"fields": {
"fulltext": {
"number_of_fragments": 0
}
},
"post_tags": "</b>"
},
"query": …Run Code Online (Sandbox Code Playgroud) 我正在做一个需要全文搜索一本书的项目。我一次只需要搜索一本书,我需要从书的开头获得搜索词的偏移量。我需要它用于由 Django/python 提供支持的站点,但我认为 Elasticsearch 更好更快。
目前我还没有直接通过抽象层django-haystack直接使用Elasticsearch。
编辑 1:我不仅需要向用户显示他们正在搜索的文本,而且还需要为他们显示该文本的链接。基本上它应该像 Mac 上预览中的搜索框一样工作。用户看到带有周围文本的搜索结果,如果他们点击它,他们会被 JS 重定向到书的一部分,即文本所在的位置。
我正在执行如下所示的短语查询。它返回给我按相关性排序的突出显示的片段。当然,我希望用户单击某个片段,然后我会将文档滚动到相应的位置。但是,我在 Elasticsearch 中看不到任何方法来找出片段在原始文档中的位置。有任何想法吗?
GET documents/doc/_search
{
"query": {
"match_phrase": {
"text": {
"query": "hello world",
"slop": 10
}
}
},
"highlight" : {
"order" : "score",
"fields" : {
"text" : {"fragment_size" : 100, "number_of_fragments" : 10}
}
}
}
Run Code Online (Sandbox Code Playgroud)