2016-08-17 3 views
3

여러 필드에서 검색 문자열의 모든 단어를 찾으려고합니다. 예를 들면 : 그것은 각 분야에서 개별적으로 각각의 단어를 검색하고 각을 가진 모든 문서를 반환 할MongoDB - 여러 필드에서 모든 검색 문자열 단어를 찾습니다.

{ _id: 1, name: "Java Hut", description: "Coffee and cakes" }, 
{ _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" }, 
{ _id: 3, name: "Coffee Shop", description: "Just coffee" }, 
{ _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" }, 
{ _id: 5, name: "Java Shopping", description: "Indonesian goods Hut" }, 
{ _id: 6, name: "Java Coffee", description: "goods Hut" }, 
{ _id: 7, name: "Coffee Shop", description: "Just coffee Java" } 

내가 좋아하는 것 :이 자료에서 "자바 커피"를 검색한다면

지정된 필드에서 단어를 검색하십시오.

내가 IDS (1), (6)을 얻을 수 7 다시 때문에이 경기의 결과로한다 :

{ _id: 1, name: "**Java** Hut", description: "**Coffee** and cakes" },<br> 
{ _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" },<br> 
{ _id: 3, name: "Coffee Shop", description: "Just coffee" },<br> 
{ _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" },<br> 
{ _id: 5, name: "Java Shopping", description: "Indonesian goods Hut" },<br> 
{ _id: 6, name: "**Java Coffee**", description: "goods Hut" },<br> 
{ _id: 7, name: "Coffee Shop", description: "Just **coffee Java**" } 

나는 몽고 그것을 실행하기위한 효율적인 방법이 달성 할 수있는 방법에 어떤 아이디어?

답변

2

컬렉션에 text index을 추가하여 여러 필드에서 텍스트 검색을 사용할 수 있습니다. 이 경우 :

db.test.createIndex({name: 'text', description: 'text'}) 

그런 다음, 두 필드에 "자바"와 "커피"를 모두 포함하는 문서를 찾으려면 두 단어를 찾을 수 있음을 필요로 인용 두 단어와 text search 쿼리를 실행할 수 있습니다. 단어를 인용하여 phrases으로 변환하면 OR 대신 논리 AND 동작이 발생합니다.

db.test.find({$text: {$search: '"java" "coffee"'}}) 
+0

감사합니다. 단어 중 하나가 'java'대신 'jav'와 같은 부분 인 경우에도 작동합니다. 여러 부분 단어에 대해 작동하도록하는 방법이 있는지 알고 있습니까? – Kendall

+0

부분 일치는 아닌 단어 형태소 분석을 사용하므로 부분 검색 단어가 텍스트 검색에서 안정적으로 작동 할 것으로 기대하지 않습니다. – JohnnyHK

0

검색 문자열이 공백으로 구분 된 문자열 인 경우 $ text 연산자는 각 용어에 대해 논리 OR 검색을 수행하고 용어 중 하나를 포함하는 문서를 반환합니다.

db.collection.find({ $text: { $search: "java coffee" } }) 

쿼리는 커피를 반환하거나 해당 컬렉션의 모든 문서에있는 자바를 반환합니다.

자세한 내용은 manual을 참조하십시오.

관련 문제