How to retrieve the documents containing a specific term followed by another specific term in ElasticSearch?
I want to retrieve the document containing a specific term followed by another specific term. For example,
I have a index [index name: demo, type name: demo]
in ElasticSeach, and it has 3 documents, like
doc1 "myfield": "AKKARK"
doc2 "myfield": "AKARK"
doc3 "myfield": "AKKAKARK"
the field myfield
set a pattern tokenizer and the tokenizer will split the string after the letter k
. So the inverted index is
AK -> doc1,doc2,doc3
K -> doc1,doc3
ARK -> doc1,doc2,doc3
I want to retrieve thoes documents containing AK
followed by ARK
and that is doc2
and doc3
not doc1
.
I use query_string[AND]
and I get doc1
, doc2
and doc3
. This is not what I want. So how to achieve my aim?
DEMO code:
PUT demo
{
"settings": {
"number_of_replicas": 0,
"number_of_shards": 1,
"analysis": {
"analyzer": {
"split_K_analyzer": {
"type": "pattern",
"pattern": "(?<=K)",
"lowercase": false
}
}
}
},
"mappings": {
"demo":{
"properties": {
"myfield": {
"type": "text",
"analyzer": "split_K_analyzer"
}
}
}
}
}
PUT demo/demo/_bulk
{"index":{"_id" : "doc1"}}
{"myfield": "AKKARK"}
{"index": {"_id": "doc2"}}
{"myfield": "AKARK"}
{"index": {"_id": "doc3"}}
{"myfield": "AKKAKARK"}
GET demo/demo/_search
{
"query": {
"query_string": {
"default_field": "myfield",
"query": "AK AND ARK"
}
}
}
elasticsearch elastic-stack elasticsearch-5
add a comment |
I want to retrieve the document containing a specific term followed by another specific term. For example,
I have a index [index name: demo, type name: demo]
in ElasticSeach, and it has 3 documents, like
doc1 "myfield": "AKKARK"
doc2 "myfield": "AKARK"
doc3 "myfield": "AKKAKARK"
the field myfield
set a pattern tokenizer and the tokenizer will split the string after the letter k
. So the inverted index is
AK -> doc1,doc2,doc3
K -> doc1,doc3
ARK -> doc1,doc2,doc3
I want to retrieve thoes documents containing AK
followed by ARK
and that is doc2
and doc3
not doc1
.
I use query_string[AND]
and I get doc1
, doc2
and doc3
. This is not what I want. So how to achieve my aim?
DEMO code:
PUT demo
{
"settings": {
"number_of_replicas": 0,
"number_of_shards": 1,
"analysis": {
"analyzer": {
"split_K_analyzer": {
"type": "pattern",
"pattern": "(?<=K)",
"lowercase": false
}
}
}
},
"mappings": {
"demo":{
"properties": {
"myfield": {
"type": "text",
"analyzer": "split_K_analyzer"
}
}
}
}
}
PUT demo/demo/_bulk
{"index":{"_id" : "doc1"}}
{"myfield": "AKKARK"}
{"index": {"_id": "doc2"}}
{"myfield": "AKARK"}
{"index": {"_id": "doc3"}}
{"myfield": "AKKAKARK"}
GET demo/demo/_search
{
"query": {
"query_string": {
"default_field": "myfield",
"query": "AK AND ARK"
}
}
}
elasticsearch elastic-stack elasticsearch-5
add a comment |
I want to retrieve the document containing a specific term followed by another specific term. For example,
I have a index [index name: demo, type name: demo]
in ElasticSeach, and it has 3 documents, like
doc1 "myfield": "AKKARK"
doc2 "myfield": "AKARK"
doc3 "myfield": "AKKAKARK"
the field myfield
set a pattern tokenizer and the tokenizer will split the string after the letter k
. So the inverted index is
AK -> doc1,doc2,doc3
K -> doc1,doc3
ARK -> doc1,doc2,doc3
I want to retrieve thoes documents containing AK
followed by ARK
and that is doc2
and doc3
not doc1
.
I use query_string[AND]
and I get doc1
, doc2
and doc3
. This is not what I want. So how to achieve my aim?
DEMO code:
PUT demo
{
"settings": {
"number_of_replicas": 0,
"number_of_shards": 1,
"analysis": {
"analyzer": {
"split_K_analyzer": {
"type": "pattern",
"pattern": "(?<=K)",
"lowercase": false
}
}
}
},
"mappings": {
"demo":{
"properties": {
"myfield": {
"type": "text",
"analyzer": "split_K_analyzer"
}
}
}
}
}
PUT demo/demo/_bulk
{"index":{"_id" : "doc1"}}
{"myfield": "AKKARK"}
{"index": {"_id": "doc2"}}
{"myfield": "AKARK"}
{"index": {"_id": "doc3"}}
{"myfield": "AKKAKARK"}
GET demo/demo/_search
{
"query": {
"query_string": {
"default_field": "myfield",
"query": "AK AND ARK"
}
}
}
elasticsearch elastic-stack elasticsearch-5
I want to retrieve the document containing a specific term followed by another specific term. For example,
I have a index [index name: demo, type name: demo]
in ElasticSeach, and it has 3 documents, like
doc1 "myfield": "AKKARK"
doc2 "myfield": "AKARK"
doc3 "myfield": "AKKAKARK"
the field myfield
set a pattern tokenizer and the tokenizer will split the string after the letter k
. So the inverted index is
AK -> doc1,doc2,doc3
K -> doc1,doc3
ARK -> doc1,doc2,doc3
I want to retrieve thoes documents containing AK
followed by ARK
and that is doc2
and doc3
not doc1
.
I use query_string[AND]
and I get doc1
, doc2
and doc3
. This is not what I want. So how to achieve my aim?
DEMO code:
PUT demo
{
"settings": {
"number_of_replicas": 0,
"number_of_shards": 1,
"analysis": {
"analyzer": {
"split_K_analyzer": {
"type": "pattern",
"pattern": "(?<=K)",
"lowercase": false
}
}
}
},
"mappings": {
"demo":{
"properties": {
"myfield": {
"type": "text",
"analyzer": "split_K_analyzer"
}
}
}
}
}
PUT demo/demo/_bulk
{"index":{"_id" : "doc1"}}
{"myfield": "AKKARK"}
{"index": {"_id": "doc2"}}
{"myfield": "AKARK"}
{"index": {"_id": "doc3"}}
{"myfield": "AKKAKARK"}
GET demo/demo/_search
{
"query": {
"query_string": {
"default_field": "myfield",
"query": "AK AND ARK"
}
}
}
elasticsearch elastic-stack elasticsearch-5
elasticsearch elastic-stack elasticsearch-5
edited Nov 23 '18 at 1:29
huangjs
asked Nov 22 '18 at 13:18
huangjshuangjs
437
437
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Your search query returns all documents containing the tokens AK & ARK in the inverted index and this matches all the 3 docs and is working as expected.
If you want to return documents containing AK followed by ARK you should use match_phrase query like below which returns doc2 and doc3 as they contain AK followed by ARK.
GET /_search
{
"query": {
"match_phrase" : {
"myfield" : "AKARK"
}
}
}
I can work well, thanks.
– huangjs
Nov 23 '18 at 1:32
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53431895%2fhow-to-retrieve-the-documents-containing-a-specific-term-followed-by-another-spe%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Your search query returns all documents containing the tokens AK & ARK in the inverted index and this matches all the 3 docs and is working as expected.
If you want to return documents containing AK followed by ARK you should use match_phrase query like below which returns doc2 and doc3 as they contain AK followed by ARK.
GET /_search
{
"query": {
"match_phrase" : {
"myfield" : "AKARK"
}
}
}
I can work well, thanks.
– huangjs
Nov 23 '18 at 1:32
add a comment |
Your search query returns all documents containing the tokens AK & ARK in the inverted index and this matches all the 3 docs and is working as expected.
If you want to return documents containing AK followed by ARK you should use match_phrase query like below which returns doc2 and doc3 as they contain AK followed by ARK.
GET /_search
{
"query": {
"match_phrase" : {
"myfield" : "AKARK"
}
}
}
I can work well, thanks.
– huangjs
Nov 23 '18 at 1:32
add a comment |
Your search query returns all documents containing the tokens AK & ARK in the inverted index and this matches all the 3 docs and is working as expected.
If you want to return documents containing AK followed by ARK you should use match_phrase query like below which returns doc2 and doc3 as they contain AK followed by ARK.
GET /_search
{
"query": {
"match_phrase" : {
"myfield" : "AKARK"
}
}
}
Your search query returns all documents containing the tokens AK & ARK in the inverted index and this matches all the 3 docs and is working as expected.
If you want to return documents containing AK followed by ARK you should use match_phrase query like below which returns doc2 and doc3 as they contain AK followed by ARK.
GET /_search
{
"query": {
"match_phrase" : {
"myfield" : "AKARK"
}
}
}
answered Nov 22 '18 at 22:07
ben5556ben5556
1,9322310
1,9322310
I can work well, thanks.
– huangjs
Nov 23 '18 at 1:32
add a comment |
I can work well, thanks.
– huangjs
Nov 23 '18 at 1:32
I can work well, thanks.
– huangjs
Nov 23 '18 at 1:32
I can work well, thanks.
– huangjs
Nov 23 '18 at 1:32
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53431895%2fhow-to-retrieve-the-documents-containing-a-specific-term-followed-by-another-spe%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown