This is the second post on previewing images in SharePoint search results. The first post is here.
In the first post I demonstrated a way to display image previews in search results and resolved two problems. But what about the images in a Picture Libary? I didn't see them appear in search results as pictures until I added the file types. Shouldn't there be special results for Picture types?
UPDATE: Get the source files here
Previewing of Images Stored In Picture Libraries
Problem #1: Images in Picture Libraries Returned as Files or List Items
After going through the steps in Part I , even images stored in Picture Libraries are returned as files themselves. The hover works fine but you should be able to take advantage of the image result type.
Solution to Problem #1: Copy and Configure the Image Result Type
In your Search Center site collection select Site settings from the settings menu:
Under Site Collection Administration, click on Search Result Types:
Scroll down and find Image. Use the drop-down menu and select Copy:
On the Add Result Type page, select Picture Item udner What should these results look like?
Click Save:
Run a search for an item in a Picture Library:
Problem #2: Image Search Results Not Consistent
Now the results from a Picture Library and non-Picture Library look different. It is not consistent for the user:
Solution to Problem #2: Modify the Display Template for the Result.
This time you need to edit the Item_Picture.html file.
Simply add an else statement to the if in the middle of the code:
else {
ctx.CurrentItem.csr_PreviewImage = ctx.CurrentItem.Path;
}
(If you only see .js files, the .js code to modify is at the bottom of this post)
Save the file and run a search again:
Now all images that are returned have a preview image in the results!!!!
But now the hover is the Picture Library List item hover, not the one I modified in the first post. So in the next and last post of this series I modify that hover to include a larger preview!
If you are not running search in a Search Center Site Collection and/or you only see .js files in your Search Display Templates, here is the resultant .js code to paste over after the render header in Item_Picture.js:
if(!Srch.U.n(ctx.CurrentItem.PictureThumbnailURL) && !ctx.CurrentItem.IsContainer) {
ctx.CurrentItem.csr_PathLength = Srch.U.pathTruncationLengthWithPreview;
ctx.CurrentItem.csr_PreviewImage = ctx.CurrentItem.PictureThumbnailURL;
}
else {
ctx.CurrentItem.csr_PreviewImage = ctx.CurrentItem.Path;
}
In the first post I demonstrated a way to display image previews in search results and resolved two problems. But what about the images in a Picture Libary? I didn't see them appear in search results as pictures until I added the file types. Shouldn't there be special results for Picture types?
UPDATE: Get the source files here
Previewing of Images Stored In Picture Libraries
Problem #1: Images in Picture Libraries Returned as Files or List Items
After going through the steps in Part I , even images stored in Picture Libraries are returned as files themselves. The hover works fine but you should be able to take advantage of the image result type.
Solution to Problem #1: Copy and Configure the Image Result Type
In your Search Center site collection select Site settings from the settings menu:
Under Site Collection Administration, click on Search Result Types:
Scroll down and find Image. Use the drop-down menu and select Copy:
On the Add Result Type page, select Picture Item udner What should these results look like?
Click Save:
Run a search for an item in a Picture Library:
There is a preview image right in the results! That's great but that didn't happen in image results from other types of libraries - onto Problem #2.
Now the results from a Picture Library and non-Picture Library look different. It is not consistent for the user:
Solution to Problem #2: Modify the Display Template for the Result.
This time you need to edit the Item_Picture.html file.
Simply add an else statement to the if in the middle of the code:
else {
ctx.CurrentItem.csr_PreviewImage = ctx.CurrentItem.Path;
}
(If you only see .js files, the .js code to modify is at the bottom of this post)
Save the file and run a search again:
Now all images that are returned have a preview image in the results!!!!
But now the hover is the Picture Library List item hover, not the one I modified in the first post. So in the next and last post of this series I modify that hover to include a larger preview!
If you are not running search in a Search Center Site Collection and/or you only see .js files in your Search Display Templates, here is the resultant .js code to paste over after the render header in Item_Picture.js:
if(!Srch.U.n(ctx.CurrentItem.PictureThumbnailURL) && !ctx.CurrentItem.IsContainer) {
ctx.CurrentItem.csr_PathLength = Srch.U.pathTruncationLengthWithPreview;
ctx.CurrentItem.csr_PreviewImage = ctx.CurrentItem.PictureThumbnailURL;
}
else {
ctx.CurrentItem.csr_PreviewImage = ctx.CurrentItem.Path;
}
Steve, any idea on how to only make the advanced page return images based on result types?
ReplyDeleteHere's what I am thinking:
Delete1. Don't make any Search modifications at the Site Collection level.
2. Create a sub-site in your search center
3. Make Search modifications on the sub-site at the Site level (under Site Administration not Site Collection Administration)
4. Create an Advanced Search results page in the sub-site
5. Configure your advanced search to point to the Advanced Search results page in the sub-site.
I'll look into this as I just came up with that in my head.
-=Steve
Thank you so much! That did the trick, you saved me more endless hours of searching for a fix.
ReplyDeleteImage Processing Company in Chennai
Hello Steve,
ReplyDeleteAccording to screen shots in your post, using OR keyword you have searched for 2 images. Do we have to create any query rules for creating such behavior as i am unable to achieve it OOB.
The original post (part 1) was the first thing I tried, however, you don't need to do that. You just need to change the display template used as explained in this post.
ReplyDeleteSomeone posted a comment and I accidentally clicked on the Delete link instead of publish. Here is the comment:
ReplyDeleteHi, this solution works great for me when I search for Images stored in SharePoint. For images form a fileshare I just can't get a preview - anyone else with the same problem? I already checked all the managed metadata I'm getting back from fileshare images with the great search query tool but I didn't find a solution.
Hi
ReplyDeleteHow about Sharepoint Online from Office 365? I couln't find something to add jpg, png, gif als file types.
Best regards
Christoph
True. There are certain admin aspects of Search that are not exposed in SPO. I'll check out the search behavior for those types.
DeleteHi, I have a suggestion. You can use Image Rendition to increase a perfomance of a page:
ReplyDeletectx.CurrentItem.csr_PreviewImage = ctx.CurrentItem.Path + "?RenditionID=1";
It is better in cases when original image size is not small. You also can create your own rendition, or make double check to show rendition or oroginal size but with sharepoint css styling.
Great! Thanks for the tip!
DeleteThanks Steve, for your prompt response. The reason I ask is that in spite of having continuous crawl enabled, adding the JPG file to the Search results and re-indexing the library, we still have the issue of only the item properties coming back in the search results, instead of the actual link to the image.
ReplyDeleteWe did what you described in the article, in our DEV environment and it works well. The only diff is that we ran a full crawl there. Doing a full crawl in PROD is a bit of a challenge, as we have Continuous crawl in Production, and we are using just that one content source for all the URLS. Do you know if creating a separate content source and trying a full crawl of just the URL that we need, would interfere with the continuous crawl set up, (Because the URL is also included in the first Content source that has the continuous crawl and we want to leave that untouched). Really appreciate your help, thanks!
the search service won't allow you to create a content source that contains URLs from the main content source. Try the Reindex option at the list/library level as well as the site level.
Delete