我想知道如何搜索所有包含字符串字符串的文档。
我正在寻找一个在单词之前和之后使用带*的通配符的解决方案。 但它不好,因为它还检索包含包含该字符串的更大单词的文档。 https://www.elastic.co/guide/en/elasticsearch/guide/current/_wildcard_and_regexp_queries.html 即如果我搜索"新闻" 结果可以包含"维基新闻"这不是我想要的。
我的索引定义如下:
PUT /index
{
"mappings" : {
"text" : {
"properties" : {
"text" : { "type" : "string", "index" : "not_analyzed" },
"url" : { "type" : "string"}
}
}
}
}
我想搜索特定单词将出现在&text;'文本中的文档。领域 编辑: 示例数据:
curl -XPUT 'http://localhost:9200/index/type/1' -d '
{
"url": "wikipedia.com",
"Text": "in the news",
}'
curl -XPUT 'http://localhost:9200/index/type/2' -d '
{
"url": "wikipedia.com",
"Text": "Click here for Wikinews",
}'
curl -XPUT 'http://localhost:9200/index/type/3' -d '
{
"url": "wikipedia.com",
"Text": "news for each page are those:",
}'
curl -XPUT 'http://localhost:9200/index/type/4' -d '
{
"url": "wikipedia.com",
"Text": "What are the news means to you",
}'
curl -XPUT 'http://localhost:9200/index/type/5' -d '
{
"url": "walla.com",
"Text": "today News are more ...",
}'
这应该返回文件1,3,4,5 文档5,因为搜索不区分大小写。 文件2不包括在内,因为它不是新闻这个词,它是更大词的一部分,不相关
感谢帮助者
答案 0 :(得分:2)
首先,您需要删除"index" : "not_analyzed"
,因为您需要不区分大小写的搜索。 "index" : "not_analyzed"
将对该单词进行索引,然后搜索“新闻”一词并不会为您提供文档5.
{
"mappings" : {
"text" : {
"properties" : {
"text" : { "type" : "string"},
"url" : { "type" : "string"}
}
}
}
}
我使用的是默认standard analyzer,因为我没有指定任何分析器。您可以了解有关ElasticSearch Analysis Here的更多信息。
之后,一个简单的match query
就足以获得所有想要的文件。
{
"query": {
"match": {
"text": "news"
}
}
}
如果您想要短语搜索,可以将匹配查询替换为match_phrase
查询。