diff --git a/src/DynamoCore/Configuration/LuceneConfig.cs b/src/DynamoCore/Configuration/LuceneConfig.cs
index b894de80c29..363bce391aa 100644
--- a/src/DynamoCore/Configuration/LuceneConfig.cs
+++ b/src/DynamoCore/Configuration/LuceneConfig.cs
@@ -185,7 +185,12 @@ public enum NodeFieldsEnum
///
/// Node Input Parameters as string (there are nodes with same name and category but different parameters)
///
- Parameters
+ Parameters,
+
+ ///
+ /// Package author name
+ ///
+ Author
}
///
@@ -208,6 +213,7 @@ public enum NodeFieldsEnum
public static string[] PackageIndexFields = { nameof(NodeFieldsEnum.Name),
nameof(NodeFieldsEnum.Description),
nameof(NodeFieldsEnum.SearchKeywords),
- nameof(NodeFieldsEnum.Hosts)};
+ nameof(NodeFieldsEnum.Hosts),
+ nameof(NodeFieldsEnum.Author)};
}
}
diff --git a/src/DynamoCore/Utilities/LuceneSearchUtility.cs b/src/DynamoCore/Utilities/LuceneSearchUtility.cs
index 77cc6d85880..4224c63e878 100644
--- a/src/DynamoCore/Utilities/LuceneSearchUtility.cs
+++ b/src/DynamoCore/Utilities/LuceneSearchUtility.cs
@@ -214,10 +214,11 @@ internal Document InitializeIndexDocumentForPackages()
var description = new TextField(nameof(LuceneConfig.NodeFieldsEnum.Description), string.Empty, Field.Store.YES);
var keywords = new TextField(nameof(LuceneConfig.NodeFieldsEnum.SearchKeywords), string.Empty, Field.Store.YES);
var hosts = new TextField(nameof(LuceneConfig.NodeFieldsEnum.Hosts), string.Empty, Field.Store.YES);
+ var author = new TextField(nameof(LuceneConfig.NodeFieldsEnum.Author), string.Empty, Field.Store.YES);
var d = new Document()
{
- name, description, keywords, hosts
+ name, description, keywords, hosts, author
};
return d;
}
@@ -294,8 +295,9 @@ private bool IsMatchingCategory(string term, string FullCategoryName)
///
/// All fields to be searched in.
/// Search key to be searched for.
+ /// Set this to true if the search context is packages instead of nodes.
///
- internal string CreateSearchQuery(string[] fields, string SearchTerm)
+ internal string CreateSearchQuery(string[] fields, string SearchTerm, bool IsPackageContext = false)
{
//By Default the search will be normal
SearchType searchType = SearchType.Normal;
@@ -314,12 +316,13 @@ internal string CreateSearchQuery(string[] fields, string SearchTerm)
var booleanQuery = new BooleanQuery();
string searchTerm = QueryParser.Escape(SearchTerm);
- if (searchTerm.Contains('.'))
- searchType = SearchType.ByCategory;
- else if (searchTerm.Contains(' '))
- hasEmptySpaces = true;
- else
- searchType = SearchType.Normal;
+ if (!IsPackageContext)
+ {
+ if (searchTerm.Contains('.'))
+ searchType = SearchType.ByCategory;
+ else if (searchTerm.Contains(' '))
+ hasEmptySpaces = true;
+ }
var trimmedSearchTerm = hasEmptySpaces == true ? searchTerm.Replace(" ", "") : searchTerm;
diff --git a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs
index 84776f6f74f..383a0994fbe 100644
--- a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs
+++ b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs
@@ -593,6 +593,7 @@ internal void AddPackageToSearchIndex(PackageManagerSearchElement package, Docum
LuceneUtility.SetDocumentFieldValue(doc, nameof(LuceneConfig.NodeFieldsEnum.Name), package.Name);
LuceneUtility.SetDocumentFieldValue(doc, nameof(LuceneConfig.NodeFieldsEnum.Description), package.Description);
+ LuceneUtility.SetDocumentFieldValue(doc, nameof(LuceneConfig.NodeFieldsEnum.Author), package.Maintainers);
if (package.Keywords.Length > 0)
{
@@ -1457,7 +1458,7 @@ internal IEnumerable Search(string searchT
FuzzyMinSim = LuceneConfig.MinimumSimilarity
};
- Query query = parser.Parse(LuceneUtility.CreateSearchQuery(LuceneConfig.PackageIndexFields, searchTerm));
+ Query query = parser.Parse(LuceneUtility.CreateSearchQuery(LuceneConfig.PackageIndexFields, searchTerm, true));
//indicate we want the first 50 results
TopDocs topDocs = LuceneUtility.Searcher.Search(query, n: LuceneConfig.DefaultResultsCount);
diff --git a/test/DynamoCoreWpfTests/PackageManager/PackageManagerSearchElementViewModelTests.cs b/test/DynamoCoreWpfTests/PackageManager/PackageManagerSearchElementViewModelTests.cs
index 8ae630e8e3c..29ef0653d92 100644
--- a/test/DynamoCoreWpfTests/PackageManager/PackageManagerSearchElementViewModelTests.cs
+++ b/test/DynamoCoreWpfTests/PackageManager/PackageManagerSearchElementViewModelTests.cs
@@ -537,8 +537,8 @@ public void PackageSearchDialogSearchTestDependencyFilters()
packageManagerSearchViewModel.NonHostFilter[3].FilterCommand.Execute(string.Empty);
Assert.IsFalse(packageManagerSearchViewModel.NonHostFilter[4].OnChecked);
}
-
- ///
+
+ ///
/// This unit test will validate that we can search packages in different languages and they will be found.
///
[Test]
@@ -549,6 +549,7 @@ public void PackageSearchDialogSearchDifferentLanguage()
string packageVersionNumber = "1.0.0.0";
string packageCreatedDateString = "2016 - 12 - 02T13:13:20.135000 + 00:00";
string formItFilterName = "FormIt";
+ var packageMaintainer = new User(){ username = "DynamoTest", _id = "90-63-17" };
//Packages list
List packagesNameDifferentLanguages = new List { "paquete", "упаковка", "包裹" };
@@ -579,6 +580,7 @@ public void PackageSearchDialogSearchDifferentLanguage()
name = package,
versions = new List { tmpPackageVersion },
host_dependencies = new List { formItFilterName },
+ maintainers = new List { packageMaintainer },
}), false);
packageManagerSearchViewModel.AddToSearchResults(tmpPackage);
}